【问题标题】:Multiple Mex endpoint is mandatory for different types of endpoint不同类型的端点必须使用多个 Mex 端点
【发布时间】:2015-06-02 17:29:09
【问题描述】:

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

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我在编辑部分后在我的问题末尾提出了另一个问题......所以请看一下并讨论......谢谢
    • @Thomas:不,在您的服务内部,您无法知道客户端使用哪个端点进行此调用。
    • 你说........即使没有任何 MEX 端点,您的服务也将完全运行。如果有人想与您的服务交互,您需要以其他方式提供相关信息,只需讨论我可以向客户提供信息的方式是什么,因此如果 mex 被禁用,他们可以调用我的服务
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2012-06-17
      • 2016-03-09
      • 2015-09-23
      • 1970-01-01
      • 2020-12-07
      相关资源
      最近更新 更多