错误:已超出传入邮件的最大邮件大小限额(65536)

时间:2014-07-22 19:30:57

标签: wcf

我收到此错误消息

  

已超出传入邮件的最大邮件大小限额(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>

1 个答案:

答案 0 :(得分:3)

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

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

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

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