【问题标题】:MaxReceivedMessageSize error in WCFWCF 中的 MaxReceivedMessageSize 错误
【发布时间】:2013-09-21 11:48:31
【问题描述】:

我是 WCF 的新手,请帮帮我。我收到此错误。我在互联网上搜索过这个问题,我有很多解决方案,但是当我应用这些解决方案时。我面临的一些新问题。所以请给我一个有效的解决方案。

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

服务 Web.config 文件。

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="WSHttpBinding_IService1" maxBufferSize="2147483647"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="WcfServiceZone_Store.Service1" behaviorConfiguration="metadataBehavior">
    <!-- Service Endpoints -->
    <endpoint address="" binding="wsHttpBinding" contract="WcfServiceZone_Store.IService1">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataBehavior">
      <!-- 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="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

客户端 Web.config 文件:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="WSHttpBinding_IService1" maxBufferSize="2147483647"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:50274/Service1.svc" binding="wsHttpBinding" contract="ServiceReference1.IService1">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</client>

请告诉我,我需要在哪方面进行更改。

【问题讨论】:

    标签: wcf wcf-data-services wcf-binding wcf-security


    【解决方案1】:

    您需要在双方(服务器和客户端)上进行更改,但您需要进行适当的绑定 - 您的服务(和客户端)实际使用的绑定!

    因此,在您的情况下,在您的服务器端,服务配置为使用wsHttpBinding

    <service name="WcfServiceZone_Store.Service1" behaviorConfiguration="metadataBehavior">
       <endpoint address="" binding="wsHttpBinding" contract="WcfServiceZone_Store.IService1">
                                     *************
    

    但是您已经在 basicHttpBinding 上定义了更高的值.....当然,这是行不通的!

    <bindings>
       <basicHttpBinding>
        ****************   this doesn't match with the defined binding on your endpoint!
    

    而且您也没有引用您定义的新绑定配置 - 您需要告诉 WCF 才能实际使用这些新绑定值!

    所以你需要在服务器上这样做:

    <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="BindingWithMaxSizeIncreased" 
             maxBufferPoolSize="2147483647" 
             maxReceivedMessageSize="2147483647">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                  maxNameTableCharCount="2147483647" />
        </binding>
      </wsHttpBinding>
    </bindings>
    
    <services>
      <service name="WcfServiceZone_Store.Service1" behaviorConfiguration="metadataBehavior">
        <!-- Service Endpoints -->
        <endpoint 
            address="" 
            binding="wsHttpBinding" 
            bindingConfiguration="BindingWithMaxSizeIncreased"  -- use those new values!
            contract="WcfServiceZone_Store.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    

    客户端也一样:

    • 正确绑定定义绑定参数(wsHttpBinding - 不是basicHttpBinding
    • 将对bindingConfiguration 的引用添加到&lt;endpoint&gt;,以便实际使用这些值

    【讨论】:

    • wsHttpBinding 没有 maxBufferSize 属性。
    【解决方案2】:

    对于 customBinding 添加具有以下值的 httpTransport

     <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="QueryDocumentWSPortBinding">
                    <textMessageEncoding messageVersion="Soap12" />
    
                  <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
                </binding>
                ....
    

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多