Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

1.调用服务时服务

当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常:

错误:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ (命名空间)进行反序列化时出错: InnerException 消息是“反序列化对象异常,读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。

2.原因及解决方案

WCF传输大数据时,因为WCF本身的安全机制导致的,限制了客户端与服务器资源传输大小,当传输的数据超过上限后会产生异常。

     发送大数据:在WCF服务端解决

NetTcpBinding binding =  new NetTcpBinding();

            binding.MaxReceivedMessageSize= 2147483647(更改这个数字) ;

     接收大数据:在WCF客户端解决

            NetTcpBinding binding =  new NetTcpBinding();

            binding.ReaderQuotas = new XmlDictionaryReaderQuotas()

{ MaxStringContentLength = 2147483647(更改这个数字) };

Web Service 调用时,在绑定代理端是,添加如下BasicHttpBinding:

 有两种方法处理:
  第一种:在调用时传入Binding参数。

    

 BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None)
                  { MaxReceivedMessageSize = int.MaxValue,
                    MaxBufferSize = int.MaxValue,
                    ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
                   { MaxStringContentLength = 2147483647 }
                  }
DLTEST.ServiceReference2.CS_WebServiceSoapClient svs = new DLTEST.ServiceReference2.CS_WebServiceSoapClient(binding);  

  第二种方法,改一下调用客户端的配置文件app.config

    增加binding节点下增加 readerQuotas节点控制

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="CS_WebServiceSoap" >
                  <readerQuotas maxDepth="64" maxStringContentLength="8192000" maxArrayLength="16384000"
                            maxBytesPerRead="4096000" maxNameTableCharCount="16384000" />
                </binding>
              <binding name="CS_WebServiceSoap1" >
                <readerQuotas maxDepth="64" maxStringContentLength="8192000" maxArrayLength="16384000"
                            maxBytesPerRead="4096000" maxNameTableCharCount="16384000" />
              </binding>
                <binding name="CS_WebServiceSoap2" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://10.0.0.251:100/WebService/CS_WebService.asmx"
                binding="basicHttpBinding" bindingConfiguration="CS_WebServiceSoap"
                contract="ServiceReference1.CS_WebServiceSoap" name="CS_WebServiceSoap" />
            <endpoint address="http://localhost:90/WebService/CS_WebService.asmx"
                binding="basicHttpBinding" bindingConfiguration="CS_WebServiceSoap1"
                contract="ServiceReference2.CS_WebServiceSoap" name="CS_WebServiceSoap1" />
            <endpoint address="http://localhost:3383/WebService/CS_WebService.asmx"
                binding="basicHttpBinding" bindingConfiguration="CS_WebServiceSoap2"
                contract="ServiceReference3.CS_WebServiceSoap" name="CS_WebServiceSoap2" />
        </client>
    </system.serviceModel>
</configuration>

  

时间: 2024-12-11 04:10:42

Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法的相关文章

读取 XML 数据时,超出最大字符串内容长度配额 (8192)

问题描述,在调用接口报错: 格式化程序尝试对消息反序列化时引发异常:  尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetRechargeInfoListResponse.InnerException 消息是“反序列化对象 属于类型 ServiceReference.GetRechargeInfoListResponseBody 时出现错误.读取 XML 数据时,超出最大字符串内容长度配额 (8192).通过更改在创建 XML 读取器时所使用的 XmlDiction

Web Service和WCF的到底有什么区别

[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.  

面试题:Web Service与wcf的区别

Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

Web Service和WCF的区别。其实二者不属于一个范畴!!!

Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关的描述.此外Web services 可以注册到UDDI中心.供其客户查找使用.     

Web Service和WCF的区别

*Web Service和WCF的区别: Web Service是一种行业标准,也就是Web Service规范,既不是框架也不是技术 WCF是一个分布式应用的开发框架,属于特定的技术,或者是平台,既不是标准也不是规范->DCOM协议 分布式组件对象模型 是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象. DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口

XML序列化器读取XML数据

PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到一个IP识别功能,就是判断该会员卡是否可以在该IP段内使用,看着一大片的用if then 写的IP地址判断,我就蛋疼了.... 我就一直琢磨该怎么优化代码,开始用逗号去分割,然后把IP地址写在web.config中,但是太多了,然后请教同事,同事说可以用XML配置(web.config虽然也是XML

基于Web Service的客户端框架搭建二:数据转换层(FCL)

引言 要使用WebService来分离客户端与服务端,必定要使用约定好两者之间的数据契约.Json数据以其完全独立于语言的优势,成为开发者的首选.C# JavaScriptSerializer为Json与Object对象之间的序列化与反序列化提供了良好的方法. 接口设计 数据转换包含Json反序列化成Object对象和Object序列化成Json数据.在项目中,会有很多实例对象,都需要使用Serialize和Deserialize方法来实现数据转换,我们可以抽象出一个接口IDFC(数据格式转换接

Java调用存储过程时报 The user specified as a definer (&#39;root&#39;@&#39;%&#39;) does not exist 解决方法

Caused by: java.sql.SQLException: The user specified as a definer (''@'') does not exist        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)        at com.mysql

itop4412编译内核时出现“recipe for target &#39;arch/arm/mach-exynos/cpu-exynos4.o&#39; failed”的解决方法

依次执行如下命令 #su root 输入root用户密码 #cd #vim .bashrc 到达最底行,确保环境变量如下图所示 保存退出后,执行如下指令 #source .bashrc 重启Terminal终端(必须),再次进入内核路径进行编译,即可通过. itop4412编译内核时出现"recipe for target 'arch/arm/mach-exynos/cpu-exynos4.o' failed"的解决方法 原文地址:https://www.cnblogs.com/Unf