您的位置:首页 > 其它

若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性

2012-10-24 18:12 471 查看
在WCF/WebService中,如果返回值过大,比如Array,List,DataSet等达到一定数量级的话,可能引发下面的异常:

WebService代码

Client端代码


1. 受信Message Quota Size超过65536 (System.ServiceModel.CommunicationException)





解决方法:修改客户端配置文件app.config 的 maxReceivedMessageSize,maxBufferSize 两个属性。

但是,数量级继续增大,还会遇到新的问题:

2. MaxItemsInObjectGraph Quta Size超过65536(InnerException:System.Runtime.SerializationException)





因为关联配置节点比较多,这个时候就得动用 WCF Service Configuration Edition 来修改了。





(1) 打开app.config 修改 Advanced 节点,为 Endpoint Behaviors 添加一个新的Behavior:“dataContractSerializer”, 修改该属性“MaxItemsInObjectGraph”的值









(2) 修改Client节点的Endpoints的Service1Soap的BehaviorConfiguration关联上刚才增加的NewBehavior





(3) 保存

生成XML如下,其中红色部分是被修改的部分:
<behavior name="NewBehavior">
<dataContractSerializer maxItemsInObjectGraph="65536000" />
</behavior>

...

<endpoint address="http://localhost:3511/Service1.asmx" behaviorConfiguration="NewBehavior"
binding="basicHttpBinding" bindingConfiguration="Service1Soap"
contract="WebSvc.Service1Soap" name="Service1Soap" />

[html] view plaincopy

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<behaviors>

<endpointBehaviors>

<behavior name="NewBehavior">

<dataContractSerializer maxItemsInObjectGraph="65536000" />

</behavior>

</endpointBehaviors>

</behaviors>

<bindings>

<basicHttpBinding>

<binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"

receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"

bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"

messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

useDefaultWebProxy="true">

<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

maxBytesPerRead="4096" maxNameTableCharCount="16384" />

<security mode="None">

<transport clientCredentialType="None" proxyCredentialType="None"

realm="" />

<message clientCredentialType="UserName" algorithmSuite="Default" />

</security>

</binding>

</basicHttpBinding>

</bindings>

<client>

<endpoint address="http://localhost:3511/Service1.asmx" behaviorConfiguration="NewBehavior"

binding="basicHttpBinding" bindingConfiguration="Service1Soap"

contract="WebSvc.Service1Soap" name="Service1Soap" />

</client>

</system.serviceModel>

</configuration>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐