问题描述
我现在通过WCFstremed方式传输入pdf文件,客户要求传输500M大小,如果WCF和web程序部署在同一台服务器上,可以成功,但是如果我把web程序部署到另一台服务器,wcf不动,每次传输150M左右就超时了,实际上只传了3分钟。我的server端设置如下:<serviceHostingEnvironmentmultipleSiteBindingsEnabled="true"aspNetCompatibilityEnabled="false"minFreeMemoryPercentageToActivateService="1"/><bindings><basicHttpBinding><bindingname="TransferService"allowCookies="false"bypassProxyOnLocal="false"closeTimeout="00:10:00"openTimeout="00:01:00"sendTimeout="00:10:00"receiveTimeout="00:30:00"maxReceivedMessageSize="9223372036854775807"maxBufferPoolSize="524288"maxBufferSize="2147483647"transferMode="Streamed"><readerQuotasmaxDepth="2147483647"maxStringContentLength="2147483647"maxArrayLength="2147483647"maxBytesPerRead="2147483647"maxNameTableCharCount="2147483647"/><securitymode="None"><transportclientCredentialType="None"></transport></security></binding></basicHttpBinding></bindings><services><servicebehaviorConfiguration="TransferServiceBehavior"name="Sg.Com.Socius.Development.EDMS.Portal.Service.Service.TransferService"><endpointaddress=""binding="basicHttpBinding"bindingConfiguration="TransferService"contract="Sg.Com.Socius.Development.EDMS.Portal.Service.Global.ITransferService"></endpoint></service><behaviors><serviceBehaviors><behaviorname="TransferServiceBehavior"><serviceDebugincludeExceptionDetailInFaults="true"/><serviceTimeoutstransactionTimeout="00:10:00"/><serviceMetadatahttpGetEnabled="true"/><dataContractSerializermaxItemsInObjectGraph="2147483647"/><serviceThrottlingmaxConcurrentCalls="500"maxConcurrentSessions="500"maxConcurrentInstances="500"/></behavior></serviceBehaviors><endpointBehaviors><behaviorname="Behaviors.EndpointBehavior"><dataContractSerializermaxItemsInObjectGraph="2147483647"></dataContractSerializer></behavior></endpointBehaviors></behaviors></system.serviceModel><system.web><compilationtargetFramework="4.0"debug="true"/><httpRuntimemaxRequestLength="2097151000"useFullyQualifiedRedirectUrl="true"executionTimeout="14400"/><pagescontrolRenderingCompatibilityVersion="3.5"clientIDMode="AutoID"/></system.web>publicRemoteDocumentNoStreamUploadPdfFileDocument(RemoteDocumentrequest){RemoteDocumentNoStreamresponse=newRemoteDocumentNoStream();response.Success=false;try{MyUtil.addInfoLog("BeginUploadPdfFileDocument:"+request.FileName);FileStreamtargetStream=null;StreamsourceStream=request.FileByteStream;DocdocPDF=newMasterlistPDF(request.ProjectNo,request.FileName);stringfilePath=((MasterlistPDF)docPDF).GenMasterPDFFullName_GuidFN();Util.CreateServerFolderFromFileName(filePath);using(targetStream=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None)){constintbufferLength=65000;byte[]buffer=newbyte[bufferLength];intcount=0;intiCount=0;while((count=sourceStream.Read(buffer,0,bufferLength))>0){iCount+=1;targetStream.Write(buffer,0,count);}MyUtil.addInfoLog("Readcount:"+iCount);targetStream.Close();sourceStream.Close();}response.ServerFileName=filePath;response.Success=true;//request.ServerFileName=serverFileName;FileInfofi=newFileInfo(filePath);if(!fi.Exists){response.Success=false;}}catch(Exceptionex){MyUtil.addErrorLog(ex.Message);response.Success=false;}MyUtil.addInfoLog("Success:"+response.Success);returnresponse;}客户端设置如下:<system.serviceModel><bindings><basicHttpBinding><bindingname="BasicHttpBinding_ITransferService"closeTimeout="00:10:00"openTimeout="00:10:00"receiveTimeout="00:10:00"sendTimeout="00:10:00"maxReceivedMessageSize="2147483647"maxBufferSize="2147483647"transferMode="Streamed"><readerQuotasmaxStringContentLength="2147483647"/></binding></basicHttpBinding></bindings><client><endpointaddress="http://IP:19288/TransferService.svc"binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_ITransferService"contract="Services.TransferService.ITransferService"name="BasicHttpBinding_ITransferService"/></client></system.serviceModel>每次传输150M3分钟左右就报超时出错了
解决方案
解决方案二:
有时服务器方法根本就没有执行就返回超时出错。