我有一个Web应用程序,可以让用户上传文件。然后使用另一个服务上的WCF服务保存文件。这个上传工作正常,直到我上传4.5 MB左右的文件。当我上传一个超过一定大小的文件时,我收到错误:
肥皂错误:413服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的请求...
此错误出现在运行WCF服务的服务器的系统事件日志中。
我发现的解决方案告诉我更改applicationHost配置文件中的maxAllowedContentLength和uploadReadAheadSize设置。但是,如果将maxAllowedContentLength设置为非常小并且更改uploadReadAheadSize值,则将maxAllowedContentLength更改为仅创建了不同的错误,这对问题没有任何影响。有谁知道我要改变什么以及我必须改变它?我一直在寻找几个小时,我开始变得不耐烦了:(。感谢您的帮助!
编辑:
确定位于生产系统上的WCF服务的web.config如下所示。这是位于WCF Web服务的IIS站点指向的文件夹中的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="SOAP" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files (x86)\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" preCondition="bitness32" />
<add name="WSDL Mapping" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
测试系统的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="WSDL Mapping" path="*.wsdl" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\Common Files\MSSoap\Binaries\SOAPIS30.dll" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
如您所见,任何一个文件中都没有提及任何内容长度或任何内容。我不得不承认,在这一点上我很难过。但就像我说的那样,我不是IIS的专家。
编辑2:
以下是我的Web应用程序的web.config的
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WsJobsSoapBinding" closeTimeout="00:05:00" openTimeout="00:05:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://srvts01test:90/WsJobs.WSDL" binding="basicHttpBinding" bindingConfiguration="WsJobsSoapBinding" contract="JobsWs.WsJobsSoapPort" name="WsJobsSoapPort"/>
</client>
</system.serviceModel>
这是我的Web应用程序的web.config,它调用WCF服务而不是WCF服务本身的web.config。再次感谢您的帮助:)
答案 0 :(得分:0)
您想要更改MaxReceivedMessageSize。
我认为当我这样做时,我还必须将MaxBufferPoolSize更改为相同的值。
你可以通过配置或像这样的代码来实现。
binding.MaxBufferPoolSize = 67108864;
binding.MaxReceivedMessageSize = 67108864;
答案 1 :(得分:0)
我发现了一篇文章,讨论了您在聊天中提到的45KB大小限制。它包括所做的配置更改。
http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP
您的测试环境可能已经进行了这些更改,因此需要考虑/考虑一件事。人们有时在部署期间不会覆盖配置文件,因此您可能在那里使用旧文件。
答案 2 :(得分:0)
我的WCF服务中也出现了这413个错误,该服务在.Net 4.5下运行。
解决方案很简单。
以前,我的web.config包含:
<services>
<service name="PocketCRMServices.Service1">
<endpoint address="../Service1.svc"
binding="webHttpBinding"
contract="PocketCRMServices.IService1"
behaviorConfiguration="webBehaviour" />
</service>
</services>
因此,默认情况下,它已经在使用webHttpBinding
绑定。
为了摆脱413错误,我只需要在本节后直接添加:
<bindings>
<webHttpBinding>
<binding maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647777" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</webHttpBinding>
</bindings>
就是这样。