WCF 中的 MaxReceivedMessageSize 错误
Posted
技术标签:
【中文标题】WCF 中的 MaxReceivedMessageSize 错误【英文标题】:MaxReceivedMessageSize error in WCF 【发布时间】: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>
请告诉我,我需要在哪方面进行更改。
【问题讨论】:
【参考方案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
的引用添加到<endpoint>
,以便实际使用这些值
【讨论】:
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>
....
【讨论】:
以上是关于WCF 中的 MaxReceivedMessageSize 错误的主要内容,如果未能解决你的问题,请参考以下文章