仍然从WCF接收(413)请求实体太大

时间:2016-03-30 18:34:18

标签: wcf

我查看了与此问题相关的大多数问题,但没有一个解决方案正在发挥作用。我所拥有的绑定列在下面......

服务器

<basicHttpBinding>
    <binding name="UploadSoap" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        <security mode="Transport"></security>
    </binding>
</basicHttpBinding>
<webHttpBinding>
    <binding name="UploadSoapWeb" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</webHttpBinding>
<client>
    <endpoint address="https:.../upload.asmx" binding="webHttpBinding" bindingConfiguration="UploadSoapWeb" contract="Upload.UploadSoap" name="UploadSoap" />
</client>

客户端

<bindings>
        <basicHttpBinding>
          <binding name="BasicHttpBinding_service" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://.../service.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_service"
            contract="HH.service" name="BasicHttpBinding_service" />
    </client>

我已尝试过基本绑定和Web绑定,但我仍然收到错误消息。

由于

2 个答案:

答案 0 :(得分:1)

您尚未为服务设置显式绑定,因此默认配置值为basicHttpBindingmaxReceivedMessageSize的默认值为64KB。

请注意,maxReceivedMessageSize仅适用于邮件接收者,而不适用于邮件发件人。如果客户端发送大量消息,则不需要设置这些值。

将服务器端绑定更新为以下内容:

<basicHttpBinding>
    <!-- Unnamed (default) binding-->
    <binding maxBufferPoolSize="2147483647" 
             maxBufferSize="2147483647" 
             maxReceivedMessageSize="2147483647"
             messageEncoding="Text" /> <!-- Consider using Mtom if you're transfering binary data-->
    <binding name="UploadSoap">
        <security mode="Transport"></security>
    </binding>
</basicHttpBinding>
<client>
    <endpoint address="https:.../upload.asmx" 
              binding="basicHttpBinding"
              bindingConfiguration="UploadSoap"
              contract="Upload.UploadSoap" name="UploadSoap" />
</client>

未命名的绑定将使用basicHttpBinding而不是bindingConfiguration为任何端点,服务器或客户端提供默认值。

我认为您的客户没有收到大回复信息。

答案 1 :(得分:0)

如果您从服务中收到413错误,则问题似乎是您的服务配置没有任何明确定义的服务端点,因此您的绑定配置为&# 39; ve创建并未被使用。

您需要在服务配置中添加<services>部分,如下所示:

<services>
  <service name="YourServiceName">
    <endpoint address="" binding="basicHttpBinding"
              bindingConfiguration="UploadSoap"
              contract="YourContractName" />
  </service>
</services>

正如目前发布的那样,没有任何内容告诉WCF使用您定义的服务绑定配置,因此默认情况下,WCF将使用basicHttpBinding和默认(较低)值。

解决此问题的第二种方法是定义绑定配置,并通过省略name属性将其设置为该类型绑定的默认值,如下所示:

<binding maxBufferPoolSize="2147483647" 
         maxBufferSize="2147483647" 
         maxReceivedMessageSize="2147483647" 
         messageEncoding="Text">
  <readerQuotas maxDepth="2147483647" 
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647" 
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
  <security mode="Transport"></security>
</binding>

我通常更喜欢第一种方法(设置一个显式的服务端点),但要么应该工作。