WCF服务返回意外响应:(413)请求实体太大

时间:2015-09-30 12:56:25

标签: c# wcf web-config

我使用WCF实现了一小组REST服务。其中一项服务收到大量数据。在调用它时(这是从visual studio运行它 - 我还没有将它部署到生产服务器上)我收到错误

  

远程服务器返回错误:(413)请求实体太大。

我的网络配置

<binding name="BasicHttpBinding_ISalesOrderDataService" 
         closeTimeout="00:10:00"
         openTimeout="00:10:00" 
         receiveTimeout="00:10:00" 
         sendTimeout="00:10:00"
         allowCookies="false" 
         bypassProxyOnLocal="false" 
         hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="2147483647" 
         maxBufferSize="2147483647" 
         maxReceivedMessageSize="2147483647"
         textEncoding="utf-8" 
         transferMode="Buffered" 
         useDefaultWebProxy="true"
         messageEncoding="Text">
  <readerQuotas maxDepth="2000000" 
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647" 
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
  <security mode="None">
    <transport clientCredentialType="None" 
               proxyCredentialType="None" 
               realm="" />
    <message clientCredentialType="UserName" 
             algorithmSuite="Default" />
  </security>
</binding>

7 个答案:

答案 0 :(得分:4)

似乎超过配额会增加这些价值。

 maxReceivedMessageSize="2000000" maxBufferSize="2000000">

(或在可能的情况下查看您的查询以获得较低的结果)

如果没有任何效果,请点击此处查看comon probleme。

The remote server returned an error: (413) Request Entity Too Large

答案 1 :(得分:3)

我担心您的客户端没问题,但您需要检查服务器web.config

以与客户端相同的方式增加价值

<bindings>
      <basicHttpBinding>
        <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
          <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </basicHttpBinding>
</bindings>

答案 2 :(得分:3)

除了增加消息大小和缓冲区大小引号外,还要考虑增加序列化程序的 maxItemsInObjectGraph 。如果您的对象内部具有复杂的结构或对象数组,则可能很重要。 我们的典型设置看起来如此

 <behaviors>
  <endpointBehaviors>
    <behavior name="GlobalEndpoint">
      <dataContractSerializer maxItemsInObjectGraph="1365536" />
    </behavior>
 </behaviors>
 <serviceBehaviors>
    <behavior name="GlobalBehavior">
      <dataContractSerializer maxItemsInObjectGraph="1365536" />
    </behavior>
 </serviceBehaviors>

另外还有Zwan提出的建议

答案 3 :(得分:2)

如果我理解正确,您的请求就是提供大量数据的请求。这意味着您必须编辑像@Zwan所写的maxRecievedMessageSize。不在客户端的配置中,而是在其他服务配置中允许大量数据请求。

答案 4 :(得分:2)

尝试在web.config文件中增加&#34; maxItemsInObjectGraph&#34; 大小,因为此更改对我有用。有关详细信息,请参阅。

答案 5 :(得分:1)

如果您在asp.net应用程序中托管wcf rest服务,还必须设置 httpRuntime 限制因为wcf服务在ASP .NET兼容模式下运行。请注意, maxRequestLength 具有以千字节为单位的值

<configuration> <system.web>
<httpRuntime maxRequestLength="10240" /> </system.web> </configuration>

请参阅The remote server returned an error: (413) Request Entity Too Large

更多建议应该使Dispose,析构函数服务

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = 2147483647)]
[GlobalErrorBehaviorAttribute(typeof(GlobalErrorHandler))]
public partial class YourService : IYourService
{

    // Flag: Has Dispose already been called? 
    bool disposed = false;
    // Instantiate a SafeHandle instance.
    SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);

    // Public implementation of Dispose pattern callable by consumers. 
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    // Protected implementation of Dispose pattern. 
    protected virtual void Dispose(bool disposing)
    {
        if (disposed)
            return;

        if (disposing)
        {
            handle.Dispose();
            // Free any other managed objects here. 
            //
        }

        // Free any unmanaged objects here. 
        //
        disposed = true;
    }

    ~YourService()  // destructor
    {
      Dispose();
    }

}

希望它有所帮助!

答案 6 :(得分:1)

从maxRecievedMessageSize开始,您可以检查&#34; IIS请求过滤&#34; 其中请求中内容的最大长度,以字节为单位

同样在IIS中 - “UploadReadAheadSize”,可防止上传和下载大于49KB的数据。默认情况下,该值为49152字节,最多可增加到4 GB。