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


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

    WebService代码

    Client端代码

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

    err1

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

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

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

    err2 

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

    tool1

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

    config2

    config3

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

    config4

    (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" />

      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>  
  • 相关阅读:
    codeforce 266c Below the Diagonal 矩阵变换 (思维题)
    8月21日训练日记
    CodeForces 651B Beautiful Paintings
    CodeForces 651 C Watchmen
    CodeForces 17D Notepad(同余定理)
    CodeForces 19B Checkout Assistant
    Code Forces 18D Seller Bob(简单DP)
    HOJ Recoup Traveling Expenses(最长递减子序列变形)
    ZOJ 3469Food Delivery(区间DP)
    Code Forces 149DColoring Brackets(区间DP)
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/2737622.html
Copyright © 2020-2023  润新知