WCF maxReceivedMessageSize未从配置读取如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (58)

我有一个WCF服务的以下服务器端app.config:

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="default" maxReceivedMessageSize="5000000">
          <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Core.TOAService.Service1Behavior"
        name="Core.TOAService.TOAService">
        <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Core.TOAService.Service1Behavior">
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

当我尝试并通过这个服务一个大文件(只有〜250KB)时,我得到了一个记录在svclog文件中的异常:

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

从配置顶部的绑定部分可以看到,我试图将maxReceivedMessageSize设置为5000000,但服务仍然认为它被设置为默认的65536.关于什么是错的或哪个是“合适的“绑定元素?

提问于
用户回答回答于

还有更多设置:-)在<binding>标签上尝试“maxBufferPoolSize”和“maxBufferSize” 。

但最大的问题是:你的终点并没有引用绑定配置!

<endpoint address="" 
          binding="wsHttpBinding" contract="Core.TOAService.ITOAService">

你需要添加一个引用来使它变得有用 - 只是将其称为“默认”不起作用.....

<endpoint address="" 
          binding="wsHttpBinding" 
          bindingConfiguration="default"
          contract="Core.TOAService.ITOAService">

在WCF 4中(使用.NET 4.0-- 2009年晚些时候),你将能够定义“缺省绑定配置”而不必明确地命名和引用它们 - 但现在,需要在端点及其绑定和任何绑定(或行为)配置之间创建一个链接!

用户回答回答于

如果在使用WCF测试客户端时仍然收到此错误消息,这是因为客户端具有单独的MaxBufferSize设置。

纠正这个问题:

  1. 右键单击树底部的配置文件节点
  2. 选择使用SvcConfigEditor编辑

将出现可编辑设置列表,包括MaxBufferSize。

注意: 默认情况下,自动生成的代理客户端还将MaxBufferSize设置为65536。

扫码关注云+社区