通过单个WCF服务合同可以公开的最大方法/操作数是多少?
答案 0 :(得分:7)
虽然没有最大值,但您可能会遇到Metadata Exchange
的问题 - 以及以下配置值,它是默认值:maxNameTableCharCount
。
在尝试向现有功能WCF Service
添加新功能时,我在尝试“更新服务参考”时遇到错误 - 与maxNameTableCharCount
的默认值相关太小,无法处理mex
转移的大小。
可以通过在服务器配置中添加自定义Metadata Exchange
来覆盖mex binding
的默认值。
如果超出配置值,当您尝试添加或更新服务引用时,可能会看到如下所示的错误消息:
已超出最大名称表字符数限额(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>
如果您遇到服务上有很多方法的问题,这可能会有所帮助。
答案 1 :(得分:2)
没有最大值。你可以拥有任意数量的AFAIK。
但是,它是否实用是一个不同的问题。如果你在一份合同上有太多的方法,它将变得非常笨拙。
答案 2 :(得分:0)
实际限制可能不超过10-12种方法。除此之外,您可能不再描述单个组件的操作。我会非常努力地将任意组件与几十个操作重构为多个组件。
那就是说,我确定有例外!