问题描述
我的设置:
- 在 IIS Express 中托管的 ASP.NET 客户端
- 在控制台应用程序中托管的 WCF 服务
- 在管理员模式下运行 Visual Studio.NET 2012
我正在尝试从 WCF 服务返回 2 个 List 对象.当我只返回 1 个 List 对象时,我的设置工作正常.但是当我返回 2 个 List 对象时,我收到错误:
已超出传入邮件的最大邮件大小配额 (65536).要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性.
我知道这个问题已经在这个网站和其他网站上被问过很多次了.我已经尝试了几乎所有发布在互联网上的 CONFIG FILE 的各种组合,但这对我来说仍然没有奏效.
客户端配置:
<system.web><编译调试="true" targetFramework="4.0"/><httpRuntime maxRequestLength="1572864"/></system.web><system.serviceModel><客户><端点名称="basicHttpBinding"地址="http://localhost:9502/HCDataService"绑定=基本HttpBinding"bindingConfiguration="basicHttpBinding"合同="HC.APP.Common.ServiceContract.IHCServiceContract"行为配置=服务行为"></端点></客户端><绑定><基本HttpBinding><binding name="basicHttpBinding" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"><readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="16384"/></binding></basicHttpBinding></绑定><行为><端点行为><行为名称="服务行为"><dataContractSerializer maxItemsInObjectGraph="2147483647"/></行为></endpointBehaviors></行为></system.serviceModel></配置>服务器配置:
<system.serviceModel><服务><服务名称="HC.APP.Server.Service.HCDataService" behaviorConfiguration="ServiceBehaviour"><基地址><add baseAddress="http://localhost:9502/HCDataService"/></baseAddresses></host><端点名称="basicHttpBinding"地址="http://localhost:9502/HCDataService"绑定=基本HttpBinding"bindingConfiguration="basicHttpBinding"contract="HC.APP.Common.ServiceContract.IHCServiceContract"></端点></服务></服务><绑定><基本HttpBinding><binding name="basicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" ><readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="16384"/></binding></basicHttpBinding></绑定><行为><服务行为><行为名称="服务行为"><serviceDebug includeExceptionDetailInFaults="true"/><serviceMetadata httpGetEnabled="true"/><dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646"/></行为></serviceBehaviors></行为></system.serviceModel></配置>那是因为您没有在服务器上指定要使用的绑定.让我们看看你的服务器配置:
在 下,您正在为
创建绑定配置,并将其命名为
name="basicHttpBinding"
.此外,您的端点名称为 <endpoint name="basicHttpBinding" ...>
,其绑定为 binding="basicHttpBinding"
.但是,它不是指您的绑定配置,而是指绑定类型.所以,它实际上使用了 basicHttpBinding
的默认设置.
要解决此问题,首先要对端点和绑定配置进行不同的命名.例如,<endpoint name="basicEndpoint" ... >
和 <binding name="myBasicBinding" ... >
.然后,您需要使用以下属性将绑定配置分配给端点:bindingConfiguration="myBasicBinding"
.
这是客户端配置:
<httpRuntime maxRequestLength="32768"/></system.web><system.serviceModel><客户><端点名称=基本端点"地址="http://localhost:9502/HCDataService"绑定=基本HttpBinding"bindingConfiguration="myBasicBinding"合同="HC.APP.Common.ServiceContract.IHCServiceContract"行为配置=服务行为"></端点></客户端><绑定><基本HttpBinding><binding name="myBasicBinding" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"><readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/></binding></basicHttpBinding></绑定><行为><端点行为><行为名称="服务行为"><dataContractSerializer maxItemsInObjectGraph="2147483647"/></行为></endpointBehaviors></行为></system.serviceModel>
这是服务器配置:
<服务><服务名称="HC.APP.Server.Service.HCDataService" behaviorConfiguration="ServiceBehaviour"><基地址><add baseAddress="http://localhost:9502/HCDataService"/></baseAddresses></host><端点名称=基本端点"地址="http://localhost:9502/HCDataService"绑定=基本HttpBinding"bindingConfiguration="myBasicBinding"contract="HC.APP.Common.ServiceContract.IHCServiceContract"></端点></服务></服务><绑定><基本HttpBinding><binding name="myBasicBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" ><readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/></binding></basicHttpBinding></绑定><行为><服务行为><行为名称="服务行为"><serviceDebug includeExceptionDetailInFaults="true"/><serviceMetadata httpGetEnabled="true"/><dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646"/></行为></serviceBehaviors></行为></system.serviceModel>
不要忘记在您的客户端上更新服务引用
以获得正确的配置.
My Setup:
- ASP.NET client hosted in IIS Express
- WCF Service hosted in Console Application
- Running Visual Studio.NET 2012 in Admin mode
I am trying to return 2 List objects from a WCF service. My setup WORKS FINE when I return just 1 List objects. But when I return 2 List objects I get the error:
The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
I know that this question has been asked many times on this site and other sites as well. I have tried almost everything posted on the internet with various combinations of the CONFIG FILE but still this has not worked out for me.
Client Config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="1572864"/>
</system.web>
<system.serviceModel>
<client>
<endpoint name="basicHttpBinding"
address="http://localhost:9502/HCDataService"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding"
contract="HC.APP.Common.ServiceContract.IHCServiceContract"
behaviorConfiguration="ServiceBehaviour">
</endpoint>
</client>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceBehaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Server Config:
<configuration>
<system.serviceModel>
<services>
<service name="HC.APP.Server.Service.HCDataService" behaviorConfiguration="ServiceBehaviour">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9502/HCDataService"/>
</baseAddresses>
</host>
<endpoint name="basicHttpBinding"
address="http://localhost:9502/HCDataService"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding"
contract="HC.APP.Common.ServiceContract.IHCServiceContract">
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" >
<readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
<dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
That would be because you didn't specify on the server which binding to use. Let's take a look at your server config:
Under <bindings>
you are creating a binding configuration for <basicHttpBinding>
, and you are naming it name="basicHttpBinding"
. Also, your endpoint name is <endpoint name="basicHttpBinding" ...>
and its binding is binding="basicHttpBinding"
. However, it's not referring to your binding configuration, but to the binding type. So, it's actually using the default settings for basicHttpBinding
.
To fix this, first of all name your endpoint and binding configuration differently. For example, <endpoint name="basicEndpoint" ... >
and <binding name="myBasicBinding" ... >
. Then you need to assign your binding configuration to your endpoint with this attribute: bindingConfiguration="myBasicBinding"
.
Here's the client config:
<system.web>
<httpRuntime maxRequestLength="32768"/>
</system.web>
<system.serviceModel>
<client>
<endpoint name="basicEndpoint"
address="http://localhost:9502/HCDataService"
binding="basicHttpBinding"
bindingConfiguration="myBasicBinding"
contract="HC.APP.Common.ServiceContract.IHCServiceContract"
behaviorConfiguration="ServiceBehaviour">
</endpoint>
</client>
<bindings>
<basicHttpBinding>
<binding name="myBasicBinding" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceBehaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Here's the server config:
<system.serviceModel>
<services>
<service name="HC.APP.Server.Service.HCDataService" behaviorConfiguration="ServiceBehaviour">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9502/HCDataService"/>
</baseAddresses>
</host>
<endpoint name="basicEndpoint"
address="http://localhost:9502/HCDataService"
binding="basicHttpBinding"
bindingConfiguration="myBasicBinding"
contract="HC.APP.Common.ServiceContract.IHCServiceContract">
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="myBasicBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" >
<readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
<dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Don't forget to update service reference
on your client to get the correct config.
这篇关于WCF 错误 - 已超出传入消息的最大消息大小配额 (65536)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!