大二进制文件(byte [])通过WCF传输文件
|
我正在尝试构建一个WCF服务,该服务允许我将大型二进制文件从客户端发送到该服务。
但是,我只能成功传输最大3-4MB的文件。 (尝试传输4.91MB时,我失败了,当然,超出范围的话)
如果尝试发送4.91MB文件,则会收到以下错误消息:
异常消息:收到对http:// localhost:56198 / Service.svc的HTTP响应时发生错误。这可能是由于服务端点绑定未使用HTTP协议。这也可能是由于服务器终止了HTTP请求上下文(可能是由于服务关闭了)。有关更多详细信息,请参见服务器日志。
内部异常消息:基础连接已关闭:接收时发生意外错误。
内部异常消息:无法从传输连接读取数据:远程主机强行关闭了现有连接。
内部异常消息:远程主机强行关闭了现有连接
将byte []文件作为方法参数发送到公开的服务方法后,就会在客户端发生此错误。
我在服务方法的第一行有一个断点,如果成功进行文件传输(3MB以下),则会遇到断点并传输文件。但是,在这种情况下,一旦调用该方法,就会出现错误。如果发生此错误,则不会在服务中设置断点。
我将粘贴“服务Web.config”和“ Asp页面(客户端)Web.config”的各个部分。如果您还需要发送文件并接受文件的代码,请告诉我,我也将发送该文件。
服务Web.Config
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name=\"basicHttpEndpointBinding\" closeTimeout=\"01:01:00\"
openTimeout=\"01:01:00\" receiveTimeout=\"01:10:00\" sendTimeout=\"01:01:00\"
allowCookies=\"false\" bypassProxyOnLocal=\"false\" hostNameComparisonMode=\"StrongWildcard\"
maxBufferSize=\"2147483646\" maxBufferPoolSize=\"2147483646\" maxReceivedMessageSize=\"2147483646\"
messageEncoding=\"Mtom\" textEncoding=\"utf-8\" transferMode=\"StreamedRequest\"
useDefaultWebProxy=\"true\">
<readerQuotas maxDepth=\"2147483646\" maxStringContentLength=\"2147483646\" maxArrayLength=\"2147483646\"
maxBytesPerRead=\"2147483646\" maxNameTableCharCount=\"2147483646\" />
<security mode=\"None\">
<transport clientCredentialType=\"None\" proxyCredentialType=\"None\"
realm=\"\" />
<message clientCredentialType=\"UserName\" algorithmSuite=\"Default\" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration=\"DragDrop.Service.ServiceBehavior\" name=\"DragDrop.Service.Service\">
<endpoint address=\"\" binding=\"basicHttpBinding\" bindingConfiguration=\"basicHttpEndpointBinding\" contract=\"DragDrop.Service.IService\">
<identity>
<dns value=\"localhost\"/>
</identity>
</endpoint>
<endpoint address=\"mex\" binding=\"mexHttpBinding\" contract=\"IMetadataExchange\"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name=\"DragDrop.Service.ServiceBehavior\">
<serviceMetadata httpGetEnabled=\"true\"/>
<serviceDebug includeExceptionDetailInFaults=\"false\"/>
<dataContractSerializer maxItemsInObjectGraph=\"2147483646\"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
客户端(Asp.net页)Web.Config
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name=\"BasicHttpBinding_IService\" closeTimeout=\"00:01:00\"
openTimeout=\"00:01:00\" receiveTimeout=\"00:10:00\" sendTimeout=\"00:01:00\"
allowCookies=\"false\" bypassProxyOnLocal=\"false\" hostNameComparisonMode=\"StrongWildcard\"
maxBufferSize=\"2147483646\" maxBufferPoolSize=\"2147483646\" maxReceivedMessageSize=\"2147483646\"
messageEncoding=\"Mtom\" textEncoding=\"utf-8\" transferMode=\"StreamedResponse\"
useDefaultWebProxy=\"true\">
<readerQuotas maxDepth=\"2147483646\" maxStringContentLength=\"2147483646\" maxArrayLength=\"2147483646\"
maxBytesPerRead=\"2147483646\" maxNameTableCharCount=\"2147483646\" />
<security mode=\"None\">
<transport clientCredentialType=\"None\" proxyCredentialType=\"None\"
realm=\"\">
<extendedProtectionPolicy policyEnforcement=\"Never\" />
</transport>
<message clientCredentialType=\"UserName\" algorithmSuite=\"Default\" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name=\"debuggingBehaviour\">
<dataContractSerializer maxItemsInObjectGraph=\"2147483646\" />
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address=\"http://localhost:56198/Service.svc\" binding=\"basicHttpBinding\"
bindingConfiguration=\"BasicHttpBinding_IService\" contract=\"ServiceReference.IService\"
name=\"BasicHttpBinding_IService\" behaviorConfiguration=\"debuggingBehaviour\" />
</client>
</system.serviceModel>
没有找到相关结果
已邀请:
4 个回复
缮记箔
这会将最大消息长度设置为400 MB(参数以kB为单位)。检查此MSDN页面以获取更多信息。
痰嫉
和
设置。
添加一些服务代码:
和一些客户端代码:
另外,请确保没有超时,传输大文件可能需要一段时间(不过默认的receiveTimeout是10分钟)。 您可以在此处下载Microsoft WCF / WF示例代码(在撰写本文时,顶部C#链接已断开,但其他示例代码似乎可以)。
磐剩
孝铜差