【问题标题】:Error: the maximum message size quota for incoming messages (65536) has been exceeded错误:已超出传入邮件 (65536) 的最大邮件大小配额
【发布时间】:2014-09-13 19:00:29
【问题描述】:

我收到此错误消息

已超出传入邮件的最大邮件大小配额 (65536)

当我尝试将文件 (+-160KB) 上传到我的 WCF 服务时。我试图增加以下属性的值:

maxReceivedMessageSize,
maxBufferPoolSize,
maxArrayLength,
maxStringContentLength, 

但我没有运气。我的 WCF 配置文件如下所示:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="wsBinding" maxReceivedMessageSize="3200000" maxBufferPoolSize="100000000"  >
          <readerQuotas maxArrayLength="1000000000" maxStringContentLength="3200000" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
    <services>
      <service behaviorConfiguration="PMSService.Thomolosha"
        name="PMSService.Thomolosha" >
        <endpoint address="" binding="wsHttpBinding"  contract="PMSService.ThomoloshaDeclaration">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange" />
      </service>
      <service behaviorConfiguration="PMSService.Arekwe"
              name="PMSService.Arekwe">
        <endpoint address="" binding="wsHttpBinding" contract="PMSService.ArekweDeclaration">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="PMSService.Thomolosha">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
        <behavior name="PMSService.Arekwe">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

我的 Winform 配置如下所示:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ThomoloshaDeclaration" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="100000000" maxReceivedMessageSize="3200000" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="3200000" maxArrayLength="1000000000"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="WSHttpBinding_ArekweDeclaration" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="100000000" maxReceivedMessageSize="3200000" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="3200000" maxArrayLength="1000000000"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:57388/Thomolosha.svc" binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_ThomoloshaDeclaration" contract="Thomolosha.ThomoloshaDeclaration"
        name="WSHttpBinding_ThomoloshaDeclaration">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="http://localhost:57388/Arekwe.svc" binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_ArekweDeclaration" contract="Arekwe.ArekweDeclaration"
        name="WSHttpBinding_ArekweDeclaration">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

【问题讨论】:

标签: wcf


【解决方案1】:

听起来您在服务端遇到了错误(当您尝试上传时)。根据您发布的服务配置,您已为 maxReceivedMessageSize 和其他设置设置了更高的限制,但您从未分配该绑定到您的服务端点,因此 WCF 使用默认值为maxReceivedMessageSize (65536)。

您需要通过 endpoint 元素的 bindingConfiguration 属性将定义的绑定 (wsBinding) 分配给服务端点,如下所示:

<endpoint address="" 
          binding="wsHttpBinding"
          bindingCongifuration="wsBinding"
          contract="PMSService.ThomoloshaDeclaration">

现在服务将使用您定义的绑定配置,该配置具有更大的大小。

【讨论】:

  • @chosenOneThabs:如果这个答案确实解决了您所指出的问题,那么请将其标记为这样。这可能有助于在将来尝试解决此问题时引导程序员找到答案。
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 2018-01-15
  • 2015-09-15
  • 2015-06-13
相关资源
最近更新 更多