【发布时间】:2012-04-26 01:39:06
【问题描述】:
我对如何在 WCF 中公开端点有点困惑
我有一个 tcp 端点和一个 mex tcp 端点。
<service name="MessageReaderService.MessageReaderService">
<endpoint name="NetTcpReaderService"
address="ReaderService"
binding="netTcpBinding" bindingConfiguration=""
contract="Contracts.IMessageReaderService" />
<endpoint name="netTcpMex"
address="mex"
binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8082" />
</baseAddresses>
</host>
</service>
当我尝试在服务主机中运行它时,出现以下异常:
在合约列表中找不到合约名称“IMetadataExchange” 由服务 MessageReaderService 实现。将 ServiceMetadataBehavior 添加到
配置文件或直接发送到 ServiceHost 以启用对本合同的支持。
所以我从这个错误中得出结论,我需要添加一个服务行为来公开元数据。
所以我添加了行为:
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
然后我得到一个不同的错误:
ServiceMetadataBehavior 的 HttpGetEnabled 属性设置为 true,并且 HttpGetUrl 属性是一个相对地址,但没有 http 基地址。任何一个 提供一个 http 基地址或将 HttpGetUrl 设置为绝对地址。
- 所以现在我必须添加另一个端点 (http) 以通过 mexhttpbinding 公开元数据?
- 有没有简单的方法通过 tcp 暴露端点?
【问题讨论】: