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

WebService代码

Client端代码

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

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

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

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

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

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

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

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

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

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

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

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

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

(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
    1. <?xml version="1.0" encoding="utf-8" ?>   
    2. <configuration>   
    3.     <system.serviceModel>   
    4.         <behaviors>   
    5.             <endpointBehaviors>   
    6.                 <behavior name="NewBehavior">   
    7.                     <dataContractSerializer maxItemsInObjectGraph="65536000" />   
    8.                 </behavior>   
    9.             </endpointBehaviors>   
    10.         </behaviors>   
    11.         <bindings>   
    12.             <basicHttpBinding>   
    13.                 <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"   
    14.                     receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"   
    15.                     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"   
    16.                     maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"   
    17.                     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"   
    18.                     useDefaultWebProxy="true">   
    19.                     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"   
    20.                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />   
    21.                     <security mode="None">   
    22.                         <transport clientCredentialType="None" proxyCredentialType="None"   
    23.                             realm="" />   
    24.                         <message clientCredentialType="UserName" algorithmSuite="Default" />   
    25.                     </security>   
    26.                 </binding>   
    27.             </basicHttpBinding>   
    28.         </bindings>   
    29.         <client>   
    30.             <endpoint address="http://localhost:3511/Service1.asmx" behaviorConfiguration="NewBehavior"   
    31.                 binding="basicHttpBinding" bindingConfiguration="Service1Soap"   
    32.                 contract="WebSvc.Service1Soap" name="Service1Soap" />   
    33.         </client>   
    34.     </system.serviceModel>   
    35. </configuration>  

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
  • 2021-06-22
  • 2022-12-23
  • 2022-02-16
  • 2021-11-12
  • 2021-10-19
猜你喜欢
  • 2022-02-28
  • 2021-07-31
  • 2021-10-12
  • 2021-10-27
  • 2022-12-23
  • 2022-02-17
相关资源
相似解决方案