【发布时间】:2014-04-05 15:58:40
【问题描述】:
可以通过单个 WCF 服务合同公开的方法/操作的最大数量是多少?
【问题讨论】:
标签: wcf web-services
可以通过单个 WCF 服务合同公开的方法/操作的最大数量是多少?
【问题讨论】:
标签: wcf web-services
虽然没有最大值,您可能会遇到Metadata Exchange 的问题 - 以及以下配置值,它是默认值:maxNameTableCharCount。
在尝试将新功能添加到现有功能 WCF Service 时,我在尝试“更新服务参考”时遇到错误 - 与 maxNameTableCharCount 的默认值太小而无法处理有关mex 传输的大小。
可以通过在服务器配置中添加自定义 mex binding 来覆盖 Metadata Exchange 的默认值。
如果超出配置值,当您尝试添加或更新服务参考时,您可能会看到如下错误消息:
已超过最大可命名字符数配额 (16384) 在读取 XML 数据时。命名表是一种数据结构,用于 存储 XML 处理期间遇到的字符串 - 长 XML 文档 具有不重复的元素名称、属性名称和属性值 可能会触发此配额。这个配额可以通过改变 XmlDictionaryReaderQuotas 对象的 MaxNameTableCharCount 属性 创建 XML 阅读器时使用。第 1 行,位置 332845。
Server Mex 端点应指定如下:
<endpoint address="mex"
binding="customBinding"
contract="IMetadataExchange"
name=""
bindingConfiguration="customMex"
listenUriMode="Explicit" />
使用如下指定的自定义绑定块:
<customBinding>
<binding name="customMex">
<textMessageEncoding>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered" maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"/>
</binding>
</customBinding>
如果您在服务上遇到很多方法的问题,这可能会有所帮助。
【讨论】:
mex 为客户端生成代理类,但客户端本身从未真正使用过。那么为什么客户端配置文件需要添加这个绑定呢?
没有最大值。 AFAIK,你想拥有多少就拥有多少。
但是,它是否实用是另一个问题。如果一个合约的方法太多,会变得很笨重。
【讨论】:
实际的限制可能不超过 10-12 种方法。除此之外,您可能不再描述单个组件的操作。我会非常努力地将任何包含数十个操作的组件重构为多个组件。
也就是说,我确定也有例外!
【讨论】: