(413请求实体太大

时间:2014-11-03 21:51:46

标签: c# wcf wcf-binding http-status-code-413

我有WCF服务,当我想将参数作为大字符串传递(超过1mb)时,我有一个方法

我运行此wcf并在WCF测试客户端中更改了配置,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IMyService" sendTimeout="00:05:00"
                    maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                </binding>
            </basicHttpBinding>
        </bindings>

当我尝试调用此方法时,我仍然有413请求实体太大。

3 个答案:

答案 0 :(得分:5)

正如Matt Burland建议的那样,您需要配置服务端以及客户端。有关详细信息,请参阅Configuring Services Using Configuration Files。这项任务与您在电线的客户端所做的工作没有太大的不同。以下是上述文章的摘录。

  

WCF使用.NET的System.Configuration配置系统   框架。在Visual Studio中配置服务时,请使用a   Web.config文件或App.config文件以指定设置。该   配置文件名的选择由托管确定   您为服务选择的环境。如果您使用IIS来托管   您的服务,使用Web.config文件。如果您正在使用任何其他   托管环境,使用App.config文件。

我建议不要将所有内容设置为int.MaxValue,因为将MaxReceivedMessageSize设置为2GB会打开DOS(拒绝服务)攻击等。 MaxReceivedMessageSize属性的备注部分甚至声明:

  

服务可以在线路上接收的消息大小   使用WSHttpBindingBase受内存量的限制   为每条消息分配。这是对邮件大小的约束   限制遭受拒绝服务(DoS)攻击。

你可能只是想让它在这一点上起作用,但是建议不要这样做。

答案 1 :(得分:4)

我也面临同样的问题并解决了这个问题。 工作代码 -

(413) Request Entity Too Large in WCF 按照app.config代码。这是有效的,使用这个我可以发送大文件

<bindings>
    <webHttpBinding>
        <binding name="myBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed" >
            <readerQuotas maxDepth="64" maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
        </binding>
    </webHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="ForecastREST_API.RESTServiceImplBehavior" name="ForecastREST_API.RestServiceImpl">
        <endpoint address="http://localhost:59624/RestServiceImpl.svc" binding="webHttpBinding" contract="ForecastREST_API.IRestServiceImpl" behaviorConfiguration="Web" bindingConfiguration="myBinding">
            </identity>
        </endpoint>
        <endpoint address="mex" binding="webHttpBinding" contract="IMetadataExchange"/>
    </service>
</services>
<behaviors>
    <endpointBehaviors>
        <behavior name="Web">
            <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            <webHttp defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
            <dispatcherSynchronization asynchronousSendEnabled="true" />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="ForecastREST_API.RESTServiceImplBehavior">
            <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>

答案 2 :(得分:-1)

这对我有用, 在web.config应用程序一侧:

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IXXXXXX" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </binding>
</system.serviceModel>

,在web.config服务端,您需要在以下标记中添加此代码:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IXXXXXX" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
          <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings> 
    <services>
      <service name="ServiciosSoporteVital.WCFCaso">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="BasicHttpBinding_IXXXXXX"
                  contract="ServiciosSoporteVital.IWCFCaso"/>
      </service>
    </services>     
</system.serviceModel>

最重要的是通过两个应用程序中的绑定名称和bindingConfiguration的关系。