WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误

原文:WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误

在服务端中定义接口太多时,在客户端的服务引用时,报错误:

 元数据包含无法解析的引用:“net.tcp://localhost:8081/BaseData/mex”。    XML 文档中有错误。    读取 XML 数据时,超出最大名称表字符计数配额 (16384)。名称表是用于存储在处理 XML 时所遇到的字符串的数据结构 - 具有非重复元素、属性名称和属性值的长 XML 文档可能会触发此配额。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的  MaxNameTableCharCount 属性,可增加此配额。

解决方法:

服务端配置文件:

<system.serviceModel>

    <services>

      <!--基础数据服务-->

      <service name="PmsWcfServer.PmsWcfBaseData" behaviorConfiguration="WcfBaseData">

        <host>

          <baseAddresses>

            <add baseAddress="net.tcp://127.0.0.1:8081"/>

          </baseAddresses>

        </host>

        <endpoint address="" binding="netTcpBinding"  contract="PmsWcfServer.IPmsWcfBaseData" bindingConfiguration="BindBaseData"/>

        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>

      </service>

    </services>

    <behaviors>

      <serviceBehaviors>

        <behavior name="WcfBaseData">

          <serviceDebug includeExceptionDetailInFaults="true"/>

          <serviceMetadata httpGetEnabled="false"/>

          <serviceCredentials>

            <serviceCertificate x509FindType="FindBySubjectName" findValue="PmsWcfServer" storeLocation="LocalMachine"/>

            <userNameAuthentication userNamePasswordValidationMode="Custom"  customUserNamePasswordValidatorType="PmsWcfServer.CheckUserNamePass,PmsWcfServer"/>

          </serviceCredentials>

        </behavior>

      </serviceBehaviors>

      

      <endpointBehaviors>

        <behavior name="BindBaseData">

          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

        </behavior>

      </endpointBehaviors>

    </behaviors>

    

    <bindings>

      <netTcpBinding>

        <binding name="BindBaseData" maxReceivedMessageSize="2147483647">

          <security mode="Message">

            <message clientCredentialType="UserName"/>

          </security>

<!--注意:红色字体,这里必须要修改maxNameTableCharCount值,增大配额--> 

          <readerQuotas maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxArrayLength="2147483647" maxDepth="32000"/>

        </binding>

      </netTcpBinding>

    </bindings>

  </system.serviceModel>

    只是修改以上配置文件,客户端依然后引用不成功,还需要修改:C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.Config文件,在文件后面增加以下节:

   <system.serviceModel>  

    <bindings>  

      <netTcpBinding>  

        <binding name="BindSystem" maxBufferPoolSize="2147483647"  

          maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">  

          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"  

            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />  

          <security mode="None" />  

        </binding>  

      </netTcpBinding>  

    </bindings>  

    <client>  

      <endpoint binding="netTcpBinding" bindingConfiguration="BindSystem"  

        contract="IMetadataExchange" name="net.tcp" />  

    </client>  

  </system.serviceModel> 

重启VS,后再次引用成功! 

 

 

 

时间: 2024-09-17 21:36:49

WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误的相关文章

在C#中WCF服务端在客户端断开时清除资源

问题描述 在C#中WCF服务端如何如何知道客户端断开时清除资源 解决方案 解决方案二:你可以监听所有客户端与服务链接的Closing事件.OperationContext.Current.Channel.Closing+=newEventHandler(Channel_Closing);只适合支持Session的binding.其它参考:解决方案三:所谓"使用资源的方法"内部确保在返回之前"释放资源"就行了.

vs2005 开发biztalk项目,添加oracle适配器引用时出错

问题描述 请问大家:我在使用vs2005开发biztalk项目中,添加oracle适配器引用时,出现下面的提示:读取wsdl文件时出错:[system.InvalidOperationException]xml文档(3.73)中有错误.[System.Xml.XmlException]分析EntityName时出错.行3,位置73.请问如何解决,谢谢! 解决方案 解决方案二:没人帮我哦.各位大侠帮帮忙哦.解决方案三:这里能用到BizTalk的人少,估计很少有人能帮你.如果你的BizTalk是正版

Silverlight同步(Synchronous)调用WCF服务

Silverlight的RIA应用中访问远端的WebService或WCF服务,都是通过异步线程模式调用的.在某些情况下我们的调用是需要同步进行,虽然Silverlight没有内置同步线程模式调用远端服务接口,但是我们可以通过多线程的处理来伪装出同步调用的实现.在.NET Framework的多线程编程中提供了丰富的线程接口,其中AutoResetEvent和ManualResetEvent在多线程编码中最为常用,本文将介绍如何通过AutoResetEvent的线程等待特性实现Silverlig

一起谈.NET技术,Silverlight同步(Synchronous)调用WCF服务

Silverlight的RIA应用中访问远端的WebService或WCF服务,都是通过异步线程模式调用的.在某些情况下我们的调用是需要同步进行,虽然Silverlight没有内置同步线程模式调用远端服务接口,但是我们可以通过多线程的处理来伪装出同步调用的实现.在.NET Framework的多线程编程中提供了丰富的线程接口,其中AutoResetEvent和ManualResetEvent在多线程编码中最为常用,本文将介绍如何通过AutoResetEvent的线程等待特性实现Silverlig

Silverlight同步(Synchro“.NET研究”nous)调用WCF服务

Silverlight的RIA应用中访问远端的WebService或WCF服务,都是通过异步线程模式调用的.在某些情况下我们的调用是需要同步进行,虽然Silverlight没有内置同步线程模式调用远端服务接口,但是我们可以通过多线程的处理来伪装出同步调用的实现.在.NET Framework的多线程编程中提供了丰富的线程接口,其中AutoResetEvent和ManualResetEvent在多线程编码中最为常用,本文将介绍如何通过AutoResetEvent的线程等待特性实现Silverlig

WinForm企业应用框架设计【二】团队内部的约定和客户端按约定识别WCF服务

本系列第一篇发出来之后,与钧梓昊逑讨论了一些问题,现整理出来 (钧梓昊逑是我的入门老师~非常牛的技术天才~现在开始涉足西洋乐器领域~希望他能早日超过贝多芬~为山寨党众同仁争光~) 一:关于职责问题 客户端的主要职责负责呈现,不宜有过多的业务逻辑 与业务相关的代码和访问数据库相关的代码放在服务器端 与呈现相关的代码放在客户端  至于哪些代码是与业务相关的,哪些代码是与呈现相关的 呈现的代码是不是包含了业务,业务的代码是不是牵涉到呈现 这属于边界划分的问题,仁者见仁~智者见智~也要根据项目具体问题具

jQuery Ajax调用WCF服务详细教程_jquery

这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013. 该后台需要支持通过json来传递和接收数据. 首先,说说搭建过程. 第一步:创建WCF服务应用程序项目WCF. 第二步,创建服务使用的数据类 using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Sch

WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发

今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们来详细学习WCF服务元数据交换的相关内容.WCF服务元数据究竟是什么?为什么WCF服务要暴露元数据交换节点?这些和以前的Web Service有什么关系?WCF服务元数据交换的方式有那些?我们如何实现WCF服务元数据交换,本节我们会详细讲解.全文结构如下:[1]WCF服务元数据的基本概念.[2]WC

jQuery ajax调用WCF服务实例_jquery

恩,在由瘦客户端转换成胖浏览器端的"潮流"下,必然要使用JavaScript调用后台的各种服务. 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容.借用jQuery强大的库,使用JavaScript访问WCF服务非常简便.同事研究了一个breeze库,那么屌丝就来试验一下ajax.这里把实现简单地记录以便马克一下,以后忘了就看这篇日志来作弊. 一.更改WCF服务的配置 默认情况下,WCF服务是不允许使用HTTP请求来访问的.我们需要将WCF服务的配置文件(注意如果有其