代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

未从配置中读取wcf maxreceivedmessagesize

  •  16
  • Colin Desmond  · 技术社区  · 16 年前

    对于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文件中记录一个异常:

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

    从配置顶部的绑定部分可以看到,我已经尝试将maxReceivedMessageSize设置为5000000,但是服务仍然认为它被设置为默认的65536。关于什么是错误的或者“合适的”约束元素有什么想法吗?

    3 回复  |  直到 12 年前
        1
  •  28
  •   marc_s MisterSmith    16 年前

    还有更多设置:-)请尝试“MaxBufferPoolSize”和“MaxBufferSize” <binding> 标签。

    但最大的问题是:你的终点是 请参考绑定配置!

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

    您需要添加一个对它的引用,以便它变得有用-仅仅称它为“默认”是行不通的…..

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

    您已经领先了;-)在WCF 4中(使用.NET 4.0——2009年晚些时候),您可以定义“默认绑定配置”,而不必显式地命名和引用它们——但现在,您需要在端点和其绑定以及您所拥有的任何绑定(或行为)配置之间创建一个链接!

    马克

        2
  •  15
  •   ѺȐeallÒ¯    12 年前

    如果在使用WCF测试客户端时仍然收到此错误消息,则是因为客户端有一个单独的 水位标记 设置。

    要更正此问题:

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

    将显示可编辑设置的列表,包括MaxBufferSize。

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

        3
  •  1
  •   Shiraz Bhaiji    16 年前

    有几个地方需要设置大小。在您的情况下,我认为您需要添加读取配额。下面是一个例子:

      <basicHttpBinding>
        <binding name="httpBasicBinding_Service" closeTimeout="00:03:00"
          openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
          maxBufferSize="2000001"
          maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001">
          <readerQuotas maxDepth="2000001" maxStringContentLength="2000001"
            maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" />
        </binding>
      </basicHttpBinding>
    
    推荐文章