繁体   English   中英

WCF DefaultBinding 未用于新的 WsHttpBinding

[英]WCF DefaultBinding not used on new WsHttpBinding

我有一个在特定端点连接到 web 服务的 3rd 方库。 对于某些服务,我收到以下异常:

Message=The maximum nametable character count quota (16384) has been exceeded while reading XML data. The nametable is a data structure used to store strings encountered during XML processing - long XML documents with non-repeating element names, attribute names and attribute values may trigger this quota. This quota may be increased by changing the MaxNameTableCharCount property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 1339.

解决办法是,增加ReaderQuoata。 WCF 通过配置文件建议这一点。

我的 app.config 现在看起来像:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
    </startup>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding>
          <readerQuotas maxNameTableCharCount="2147483647" />
        </binding>
      </wsHttpBinding>
    </bindings>   
  </system.serviceModel>
</configuration>

当我现在创建一个新的 WsHttpBinding 时,它的值仍然是默认值 16384。

    class Program
    {
        static void Main(string[] args)
        {
            WSHttpBinding x = new WSHttpBinding();
            Console.WriteLine(x.ReaderQuotas.MaxNameTableCharCount); //prints 16384 
        }
    }

我错过了什么?

WSHttpBinding x = new WSHttpBinding(); 使用框架默认值创建WSHttpBinding的新实例。 即使您在配置文件中定义了默认绑定配置,您的代码也没有使用它(有关源代码,请参阅WSHttpBinding.cs )。 换句话说,调用WSHttpBinding的无参数构造函数不会应用任何关联配置文件中的默认绑定,至少我可以看到。

你有几个选择。 首先,在您的配置文件中为绑定配置命名并引用它。 其次,在以编程方式创建绑定时将值分配给XmlDictionaryReaderQuotas

选项1

<bindings>
  <wsHttpBinding>
    <binding name="MyBinding">
      <readerQuotas maxNameTableCharCount="2147483647" />
    </binding>
  </wsHttpBinding>
</bindings>

WSHttpBinding x = new WSHttpBinding("MyBinding");

选项 2

WSHttpBinding x = new WSHttpBinding();
x.ReaderQuotas rq = new XmlDictionaryReaderQuotas();
rq.MaxNameTableCharCount = Int32.MaxValue;

您是否尝试过此链接https://social.msdn.microsoft.com/Forums/vstudio/en-US/17592561-c470-452a-a52c-2a5a2839582c/metadataexchangeclient-and-nametable-character-count-quota?forum=wcf

这是我们代码中的一个错误(HTTP-GET 会忽略您传递的绑定)。 有几种解决方法

你能看看他们中的任何一个对你有用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM