我有些困惑如何在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实现的合同列表中找到。向配置文件或ServiceHost直接添加ServiceMetadataBehavior以启用对此合同的支持。
因此,我从这个错误中得出结论,我需要添加一个服务行为来公开元数据。
所以我添加了这个行为:
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
但是我收到了一个不同的错误:
ServiceMetadataBehavior的HttpGetEnabled属性设置为true,HttpGetUrl属性为相对地址,但没有http基址。要么提供一个http基址,要么将HttpGetUrl设置为绝对地址。
- 那么现在我必须添加另一个端点(http)来通过mexhttpbinding公开元数据?
- 是否有一种简单的方法可以通过tcp公开端点?