2

我的服务没有 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 等?

4

2 回答 2

3

不需要元数据交换端点,您可以声明一个端点或创建没有任何元数据交换端点的服务

于 2012-12-30T15:37:42.573 回答
3

MEX 端点——顾名思义,元数据交换暗示——用于使您的服务可发现,例如,尝试为您的服务编写客户端的人可以将他的浏览器和/或开发工具(如 Visual Studio 或svcutil)指向此端点并通过通过定义的数据交换,客户可以从服务方法和数据结构方面了解您的服务提供什么。

这是一个很好的和方便的 - 但它实际上只需要创建客户端代理代码 - 通常只需要一次。

没有MEX 端点的要求,或者如果您有安全意识,您可能会决定明确公开该信息以供所有人查看和检查。即使没有任何MEX 端点,您的服务也将完全运行。如果有人想与您的服务交互,您需要以其他方式提供相关信息,因为这些客户端无法“自动发现”并通过 MEX 检查服务 - 您必须例如提供下载您的 WSDL 和随附的 XSD 文件,以便有人可以构建客户端,而无需交互式查询您的服务的 MEX 端点。

因此 -不需要为您计划支持的每个协议 ( net.tcp, ) 公开一个 MEX 端点。http您可以很容易地拥有五个使用不同协议的不同端点,但只公开最常用的 HTTP MEX 端点(它允许客户端和开发人员在浏览器中浏览到 MEX 端点以获取“帮助页面”并查看WSDL = 描述您的服务的 Web 服务描述语言文件)

于 2012-12-30T16:48:45.117 回答