加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WCF中如何修改MaxItemsInObjectGraph的限制

发布时间:2020-12-17 01:25:07 所属栏目:安全 来源:网络整理
导读:在WCF/WebService中,如果返回值过大,比如Array,List,DataSet等达到一定数量级的话,可能引发下面的异常: WebService代码 [WebService(Namespace = " http://tempuri.org/ ")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxIte

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

WebService代码

Client端代码

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

err1

解决方法:修改客户端配置文件app.configmaxReceivedMessageSize,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" />

<?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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读