2014-11-03 133 views
5

我有WCF服务,我有一个方法,当我想通过参数大字符串(超过1MB)(413)请求实体过大

我运行这个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

你改变* *两端?服务器和客户端? – 2014-11-03 21:54:52

+1

我添加到客户端: <绑定名称= “BasicHttpBinding_IMyService” maxBufferPoolSize = “2147483647” maxReceivedMessageSize = “2147483647”> 但我仍然得到同样的错误 – Robert 2014-11-04 07:11:19

回答

4

正如Matt Burland所说,您需要配置服务端以及客户端。详情请参阅Configuring Services Using Configuration Files。该任务与您在电线的客户端完成的任务没有多大区别。这是上述文章的摘录。

WCF使用.NET Framework的System.Configuration配置系统。在Visual Studio中配置服务时,请使用 Web.config文件或App.config文件指定设置。配置文件名称的 选择取决于您为服务选择的主机环境 。如果您使用IIS来托管 您的服务,请使用Web.config文件。如果您使用任何其他 托管环境,请使用App.config文件。

我建议不设一切int.MaxValue为有MaxReceivedMessageSize设置为2GB打开你到DOS(拒绝服务)攻击等。所述MaxReceivedMessageSize属性的备注部分甚至规定:

,可以在电线上,通过使用WSHttpBindingBase服务 要接收的消息的大小是由分配给每个消息的内存量 界定。限制消息大小的限制旨在限制暴露于拒绝服务(DoS)攻击。

您可能只是试图让它在这一点上起作用,但远离推荐这样离开它。

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> 
+0

链接只答案都望而却步 – Eldho 2016-07-12 11:54:28

+0

@Eldho我已经添加了工作代码也。 – 2016-07-12 12:07:39

+0

对不起,还有其他1个已经投票 – Eldho 2016-07-12 12:08:42