我遇到了错误(413) Request Entity Too Large
。我已经做了一些搜索,我只能看到maxRecievedMessageSize
需要添加到绑定中,并且需要在bindingConfiguration
中添加绑定。我已经在我的客户端web.config和service web.config上执行了这些步骤。
客户端
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647">
<readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
...
<endpoint address="https://mysite.com/WcfServices/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="secureHttpBinding"
contract="MyService.IMyService" name="BasicHttpBinding_IMyService" />
WCF
<basicHttpBinding>
<binding name="secureHttpBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
我的WCF web.config中没有明确指定任何<service>
标记,但是在没有明确定义标记之前我已经成功了。还有其他问题可以在这里发挥作用吗?
答案 0 :(得分:0)
使用SSL / TLS时,在某些情况下,IIS可以在将整个HTTP请求传递给WCF之前对其进行缓冲。此缓冲区的默认大小仅为48k,如果超出缓冲区,IIS将返回413错误。
要解决此问题,必须通过uploadReadAheadSize
设置增加缓冲区的大小。在IIS 7.5中,您可以通过IIS管理器进入此设置:
system.webServer/serverRuntime
,发件人:ApplicationHost.config
。uploadReadAheadSize
设置为所需的缓冲区大小(以字节为单位)。确保它大于您可能发送的最大请求。对于其他IIS版本,此设置可能位于不同的位置。
获得413也可能有其他原因,但这是我遇到过的原因。当然,如果您没有在IIS中托管该服务,这显然不适用。
答案 1 :(得分:0)
您在服务配置文件中定义的basicHttpBinding
未被使用,因为它未分配给端点。在WCF 4.0+中,如果您不明确指定端点,则将获得具有默认绑定的默认端点 - http
的默认绑定为basicHttpBinding
。但这也意味着您将获得绑定的默认值。
您可以显式添加服务端点并为其分配绑定,也可以通过省略basicHttpBinding
属性来定义name
的默认定义。定义,如下:
<basicHttpBinding>
<binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2000000" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"/>
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
然后,上面的配置代码段会将basicHttpBinding
的定义设置为该应用中使用basicHttpBinding
的任何服务的默认设置。