我有一份服务合同,其中包含足够数量的操作(约 40 次操作)。当我尝试从我的客户端项目(甚至从WCF 测试客户端)添加服务引用时,我收到一个错误:
错误:无法从 net.tcp://localhost:12345/DataProvider/mex 获取元数据 如果这是您有权访问的 Windows (R) Communication Foundation 服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: net.tcp://localhost:12345/DataProvider/mex的 MSDN 文档元数据包含无法解析的引用:“net.tcp://localhost:12345/DataProvider/mex”。XML 文档中存在错误。'type' 属性的值无效 - 'q2:PersonFilter' 是 'type' 属性的无效值。
从这里开始的奇怪行为:当什么都不做,只删除一个服务操作时,一切都很顺利 - 添加服务引用效果非常好。当然,我并没有尝试删除这 ~40 种方法中的所有方法,但我尝试了 ~5 种方法。另一件重要的事情- 我没有删除使用PersonFilter
(错误消息中显示的类型)运行的方法。
我不知道如何解决这个问题。如果需要更多信息,请告诉我。
更新#1
所以,我刚刚尝试设置 mex 自定义绑定以增加默认配额:
<customBinding>
<binding name="mexBinding">
<binaryMessageEncoding>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binaryMessageEncoding>
<tcpTransport transferMode="Buffered" maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" />
</binding>
</customBinding>
和
<service name="MyNamespace.DataService" behaviorConfiguration="myServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:12345/DataProvider/" />
</baseAddresses>
</host>
<endpoint binding="netTcpBinding" bindingConfiguration="NetTcpBinding"
contract="MyNamespace.IDataService" />
<endpoint address="mex" binding="customBinding" bindingConfiguration="mexBinding"
name="tcp" contract="IMetadataExchange" />
</service>
但这无济于事——同样的错误仍在发生。
更新#2
使用ServiceModel 元数据实用工具 (Svcutil.exe)我尝试从以下 3 个来源获取元数据:
- HTTP 主机
- TCP 主机
- 直接组装
至于来源 1. 和 3. - 一切都很好。我能够获取元数据并生成客户端代码,但是当我svcutil
通过 TCP 主机调用时,我得到:
Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R) Communication Foundation,版本 4.0.30319.1] 版权所有 (c) Microsoft Corporation。版权所有。
尝试使用 WS-Metadata Exchange 从“net.tcp://localhost:12345/DataProvider/mex”下载元数据。此 URL 不支持 DISCO。
Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R) Communication Foundation,版本 4.0.30319.1] 版权所有 (c) Microsoft Corporation。版权所有。
错误:无法从 net.tcp://localhost:12345/DataProvider/mex 获取元数据
如果这是您有权访问的 Windows (R) Communication Foundation 服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455的 MSDN 文档。
WS 元数据交换错误 URI:net.tcp://localhost:12345/DataProvider/mex
Metadata contains a reference that cannot be resolved: 'net.tcp://12345/DataProvider/Management/mex'. There is an error in the XML document. The value for the 'type' attribute is invalid - 'q2:PersonFilter' is an invalid value for the 'type' attribute.
如果您需要更多帮助,请输入“svcutil /?”
我仍然不知道我的 wcf 服务或其配置有什么问题。