wcf教程-传递数据过大怎么配置?读取 XML 数据时,超出最大字符串内容长度配额 (8192)

昨天测试客户端程序与服务端wcf时,出现一个错误:

IT分享wcf教程-传递数据过大怎么配置

读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。

在wcf中其实已经配置了传递数据的大小了:maxReceivedMessageSize 获取或设置配置了此绑定的通道上可以接收的消息的最大大小。

basicHttpBinding等预定义的绑定一般具有MaxReceivedMessageSize属性,CustomBinding则需要在Transport中定义。

     <binding name="TcpBindingConfig" maxBufferPoolSize="655360000000"  maxBufferSize="655360000"     maxReceivedMessageSize="655360000000" transferMode="Streamed">

还报上面的错误,是因为传输的数据是字符串的问题。

从网上找了一下,发现都是动态配置的。整理一下:

1、在web.config中配置:

在bingding中增加一项:

<bindings>
      <netTcpBinding>
        <binding name="TcpBindingConfig" maxBufferPoolSize="655360000000"  maxBufferSize="655360000"     maxReceivedMessageSize="655360000000" transferMode="Streamed">
          <readerQuotas maxDepth="32" maxStringContentLength="655360000"
 maxArrayLength="655360000"
 maxBytesPerRead="655360000" maxNameTableCharCount="655360000" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
      <basicHttpBinding>
          <binding name="BasicHttpBindingConfig" maxBufferPoolSize="655360000000" maxBufferSize="655360000"  maxReceivedMessageSize="655360000000" sendTimeout="00:02:00" transferMode="Streamed">
            <readerQuotas maxDepth="32" maxStringContentLength="655360000"
 maxArrayLength="655360000"
 maxBytesPerRead="655360000" maxNameTableCharCount="655360000" />
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
    </bindings>

ReaderQuotas:获取或设置可由配置了此绑定的终结点处理的 SOAP 消息的复杂性约束。

该属性是XmlDictionaryReaderQuotasElement类型,一般需要设置该属性的MaxArrayLength、MaxStringContentLength及MaxDepth属性。

MaxItemsInObjectGraph:获取对象图中要序列化或反序列化的最大项数。

该属性属于DataContractSerializer类,需要在serviceBehaviors下的behavior节中配置。

2、在 后台 C#修改:

ServiceClient service = new ServiceClient(); 
       
(service.Endpoint.Binding as NetTcpBinding).MaxReceivedMessageSize = int.MaxValue;
(service.Endpoint.Binding as NetTcpBinding).MaxBufferPoolSize = int.MaxValue;
(service.Endpoint.Binding as NetTcpBinding).MaxBufferSize = int.MaxValue;      
发送大数据:在WCF服务端解决
                 NetTcpBinding binding =  new NetTcpBinding();
      binding.MaxReceivedMessageSize= 2147483647(更改这个数字) ;
接受大数据:在WCF客户端解决
      NetTcpBinding binding =  new NetTcpBinding();
      binding.ReaderQuotas = new XmlDictionaryReaderQuotas() { MaxStringContentLength = 2147483647(更改这个数字) };





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值