WCF:如何设置 MaxReceivedMessageSize 配额

Posted

技术标签:

【中文标题】WCF:如何设置 MaxReceivedMessageSize 配额【英文标题】:WCF : How to Set MaxReceivedMessageSize Quota 【发布时间】:2011-12-10 00:01:33 【问题描述】:

我有一个 WCF 服务。运行客户端应用程序时收到以下消息

传入邮件的最大邮件大小配额 (65536) 已达到 超过。要增加配额,请使用 MaxReceivedMessageSize 相应绑定元素上的属性。

我还在客户端和服务器项目的相关配置中添加了 MaxReceivedMessageSize 属性。

我在客户端应用程序中的配置是:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="RPBasicHttpBinding" allowCookies="true" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
          <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:40003/PersonWcfService.svc/PersonServices"
        binding="basicHttpBinding"
        contract="RP.Common.ServiceContract.IPersonService" name="BasicHttpBinding_IPersonService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

我在 WCF 项目中的配置是:

<system.serviceModel>
    <services>
      <service name="RP.WcfService.PersonWcfService" behaviorConfiguration="RP.WcfServiceBehaviour">
        <endpoint address="PersonServices" binding="basicHttpBinding" bindingConfiguration="RPBasicHttpEndpointBinding" contract="RP.Common.ServiceContract.IPersonService" />
      </service>
    </services>
    <behaviors>
    <serviceBehaviors>
      <behavior name="RP.WcfServiceBehaviour">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="RPBasicHttpEndpointBinding" allowCookies="true" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
          <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>

那么我应该在哪里设置 MaxReceivedMessageSize 属性来增加消息大小配额?

【问题讨论】:

【参考方案1】:

您是不是在客户端的端点配置中缺少 bindingConfiguration="RPBasicHttpBinding"... 从而获得了 basicHttpBinding 的默认配置而不是您指定的配置?

【讨论】:

+1 谢谢!我的问题通过在端点配置中添加 bindingConfiguration="RCISPBasicHttpBinding" 解决。【参考方案2】:

一旦您更改了服务器和消费者的配置,请确保重新启动这些进程(重新启动服务、重新启动应用程序池...等)。

我也建议你不要在 localhost 下运行。 Localhost 可以绕过很多设置,从而使问题解决变得困难。

【讨论】:

以上是关于WCF:如何设置 MaxReceivedMessageSize 配额的主要内容,如果未能解决你的问题,请参考以下文章

WCF - 如何以编程方式设置绑定配置?

如何设置 WCF 自定义反序列化错误消息

如何在 WCF 服务上设置密码?

如何在代码中使用 wsDualHttpBinding 设置 WCF 客户端?

获取/设置托管 WCF 服务的帐户

如何在 Sql Server 上设置安全性以允许 WCF 服务访问?