WCF服务错误413实体太大

时间:2013-12-18 06:39:22

标签: wcf

需要了解哪些内容可以进一步与WCF错误相关,我得到的请求实体太大(错误413)。

实际上,该服务是一个简单的[OperationContract],接受一个字符串作为参数。

<IService.cs>
[OperationContract]
string UploadReportText(string ReportText);


<Service.cs>
public string UploadReportText(string ReportText)
{
  // Code to process data passed.
}

我已经为服务设置了web配置,如下所示:

<bindings>
 <webHttpBinding>
    <binding maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />
   </binding>
 </webHttpBinding>
</bindings>

虽然我认为不需要触及IIS中的uploadReadAhead值(因为我没有使用SSL),但我仍然将其修改为值2147483647.

跟踪其中一个在Chrome中调用该服务的应用,我可以看到数据Content-Length是169786。

真的难倒哪里看起来与此有关。

欣赏任何见解。感谢

更新: 附加信息 如果我将传递给服务的字符串数据设置为较小的长度,我没有收到错误。我所做的大部分搜索都涉及到maxReceivedMessageSize需要调整到最大可能值,但在web配置中设置它似乎没有效果。

更新 启用日志记录,我收到此消息:

异常详情:System.ServiceModel.ProtocolException: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

4 个答案:

答案 0 :(得分:6)

首先:在服务器端,您可以使用更大的邮件大小定义绑定配置,但不要从端点引用它。

  <service behaviorConfiguration="WCFReferrals.Service1Behavior"
             name="WCFReferrals.Referrals">
       <endpoint 
             address="" 
             binding="wsHttpBinding" 
             bindingConfiguration="LargeSizeMessages"  <== you need to reference the binding config (by specifying its name
            contract="WCFReferrals.IReferrals">
        </endpoint>
        .....
      </service>
      ....
      <binding name="LargeSizeMessages"   <== give it a meaningful name
           maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
           <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
               maxArrayLength="2147483647" maxBytesPerRead="4096" 
               maxNameTableCharCount="16384" />
      </binding>

Source

Refer this too

答案 1 :(得分:0)

还需要在客户端也做同样的事情。您的客户端配置(app.config)是否也包含大型邮件大小绑定配置。

答案 2 :(得分:0)

正如Vignesh所说,您没有为您定义的绑定分配名称。这使它成为该绑定的默认配置(稍后在WCF 4.0+中),因此您实际上有两个选择。根据Vignesh的建议,您可以为其命名,创建显式端点并通过bindingCongifuration引用它。

或者,您可以使用<proctolMapping>部分的<system.serviceModel>部分将webHttpBinding指定为http的默认绑定(http的正常WCF默认绑定是basicHttpBinding

<system.serviceModel>
  <protocolMapping>
    <add binding="webHttpBinding" scheme="http" />
  </protocoalMapping>
</system.serviceModel>

这将在您的服务配置文件中。

答案 3 :(得分:0)

对我来说,我只需要将这个块添加到我的 web.config

<bindings>
  <webHttpBinding>
    <binding maxReceivedMessageSize="2147483647"
             maxBufferPoolSize="2147483647777" >
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                    maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>

我的 web.config 已使用webHttpBinding绑定(如下所示),它只需要此<bindings>部分即可上传大文件。

<services>
    <service name="PocketCRMServices.Service1">
      <endpoint address="../Service1.svc"
        binding="webHttpBinding"
        contract="PocketCRMServices.IService1"
        behaviorConfiguration="webBehaviour" />
    </service>
</services>