WebService的maxItemsInObjectGraph

首先声明,这些操作是在WebService中进行的

先看错误提示:

42b4350073b52ef8267fb57c.jpg


maxItemsInObjectGraph:一个整数,指定要序列化或反序列化的最大项数,可以限制对象图中要序列化的项数。

MaxItemsInObjectGraph 属性指定序列化程序在一次 ReadObjectWriteObject 方法调用中序列化或反序列化的对象的最大数目。该方法总是读取一个根对象,但此对象的数据成员中可以具有其他对象。这些对象又可以具有其他对象。默认值为 MaxValue。请注意,当序列化或反序列化数组时,每个数组项都计为一个单独的对象

错误原因:

这个是错误提示,在用WebService序列化的过程中,序列化的对象个数超出了65535个,也就是maxItemsInObjectGraph的默认这,造成这用情况是因为客户端与WebService之间传递的是对象,而WebService每次都要序列化对象,所以对序列化的对象的个数是有限制的,默认的就是65535,这个对象的个数是怎么计算出来的呢?

例如:现在在WebService端有一个对象Student

Public class Student

{
     Public int ID{get;set;}

    public Name{get;set;}

}

在传递的过程中,对象的个数就是这个对象的本身加上本身所包含的对象的个数,就这个来说那么就是3个对象,要想使这三个对象能够序列化 maxItemsInObjectGraph=对象个数+2(假设maxItemsInObjectGraph默认值为0),只有在maxitemslnObjectGraph 比对象个数+2大的情况下,编译器才不会报错,要不然,就会出现上面的错误,其实还不止于此,这个的前提是只有一条记录的情况下,如果是两条记录呢,MaxItemSlnObjectGraph的最小值=对象个数*记录的条数(传递的可能是这个对象的一个集合)+2,也就是传递的数据越多,MaxItemSlnObjectGraph的值就会越大,当超过他的默认值(65536)的时候就会出现上面的错误了.

解决的方法:

在客户端的App中:

首先     <system.serviceModel>节点下面:     

       <behaviors>
            <endpointBehaviors>
                <behavior name="LargeQuotaBehavior">
                    <dataContractSerializer
                      maxItemsInObjectGraph="100000000" />
                </behavior>
            </endpointBehaviors>
        </behaviors>

然后:

46edf1a83f4866d21f17a22c.jpg

在这个客户端引用的那个WebService下面添加一句:behaviorConfiguration="LargeQuotaBehavior"

这个值是上面 <behavior name="LargeQuotaBehavior">的name值,这样就可以了,你可以通过实际的数据量来设置maxItemsInObjectGraph的值.

j_0028.gif

转载于:https://www.cnblogs.com/wangshuai/archive/2009/12/29/1634978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值