WCF - 如何增加消息大小配额

493

我有一个返回1000条记录的WCF服务,从数据库中向客户端返回数据。我有一个ASP.NET WCF客户端(我已经在ASP.NET Web应用程序项目中添加了服务引用以使用WCF)。

当我运行客户端应用程序时,会收到以下消息:

传入消息的最大消息大小配额(65536)已超过。要增加配额,请在适当的绑定元素上使用MaxReceivedMessageSize属性。

如何增加消息大小配额?需要什么帮助吗?


1
我曾经遇到过同样的问题,但是我只是收到了一个不友好的网络错误400,但解决方案是消息大小的问题。 - Mr W
2
我通过使用链接中提到的步骤解决了这个问题。 - Ram
为什么默认设置这么低?安全因素吗? - Paul C
@Coops确实是为了安全。例如,通过设置消息配额,DDOS攻击就会变得更加困难(至少有点)。 - Peter van Kekem
只需要在服务器端更新您的配置。 - AbbathCL
13个回答

6

对于我来说,我所需要做的就是在客户端app.config中添加maxReceivedMessageSize="2147483647"。而服务器方面则没有更改。


3

请注意,执行入口的app.config将被考虑,而不是类库项目管理Web服务调用的配置文件(如果有)。

例如,如果在运行单元测试时出现错误,则需要在测试项目中设置适当的配置文件。


0

当我在web.config中使用这些设置时,我遇到了这个错误

System.ServiceModel.ServiceActivationException

我设置了以下的设置:
      <service name="idst.Controllers.wcf.Service_Talks">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_TalksAspNetAjaxBehavior"
      binding="webHttpBinding" contract="idst.Controllers.wcf.Service_Talks" />
  </service>
  <service name="idst.Controllers.wcf.Service_Project">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_ProjectAspNetAjaxBehavior"
      binding="basicHttpBinding" bindingConfiguration="" bindingName="largBasicHttp"
      contract="idst.Controllers.wcf.Service_Project" />
  </service>
</services>

<bindings>
<basicHttpBinding>
    <binding name="largBasicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="32"
             maxArrayLength="200000000"
             maxStringContentLength="200000000"/>
    </binding>
</basicHttpBinding>


4
你使用了 Nate 的答案解决了你的问题,然后将其发布为自己的答案。这样做不好。 - arcain
@arcain的回答非常通用,使用了股票名称和数字,这些可以预期经常出现。这个答案并不是抄袭,它只是正确的答案。由于只有一个正确答案,所以它注定会被重复。 - kingfrito_5005
@kingfrito_5005 在回答者发布此回答时,“正确”的答案已经存在了。他明显抄袭了Nate的“bindings”元素,并将其重新发布为他的答案的一部分。那些“2000000”值非常独特。 - arcain
@arcain,我不同意那些是非常标准的值,我的公司在我们的绑定元素中也使用它们。 - kingfrito_5005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接