我的服务没有 svc 文件。查看配置条目,肯定会注意到一个 mex 端点已为一个 tcp 端点声明的一件事。
所以我的问题是当我的服务将有许多端点,如 wshttp、wsDualhttp、tcp、m smq 等,那么我是否需要为每种类型的不同端点声明 mex 端点?
这是托管服务的我的服务配置详细信息。
<services>
<service name="ChatService.ChatHandler" behaviorConfiguration="behaviorConfig">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:1648/ChatService/" />
<add baseAddress="http://localhost:1647/ChatService/" />
</baseAddresses>
</host>
<endpoint address="tcp"
binding="netTcpBinding"
bindingConfiguration="tcpBinding"
contract="ChatService.IChat"/>
<endpoint address="net.tcp://localhost:1645/ChatService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"/>
</service>
</services>
编辑部分
因此,根据我对 Marc_S 的回答的理解:即使没有任何 MEX 端点,我的服务也将完全正常运行。
如果有人想与您的服务交互,您需要以其他方式提供相关信息,因为这些客户端无法“自动发现”并通过 MEX 检查服务 - 您必须例如提供下载您的 WSDL 和随附的 XSD 文件,因此有人可以构建客户端而无需交互式查询您的服务的 MEX 端点.. 所以如果我不公开 mex 那么我必须创建 wsdl 文件并且我必须手动将该 wsdl 传递给客户端.. ..我对吗?
当 mex 被禁用时,客户还有其他方法可以创建我的服务代理吗?
那么有什么方法可以从服务端确定客户端使用哪个协议来调用我的服务....假设我有多个端点,如 wshttp、wsdualhttp、tcp、msmq 等?