对于不同类型的端点,必须使用多个Mex端点

时间:2012-12-30 15:33:15

标签: wcf

我的服务没有svc文件。请参阅配置条目,并且明确注意到已为一个tcp端点声明了一个mex端点。

所以我的问题是,当我的服务有许多端点,如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等?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

MEX端点 - 正如其名称, Metadata EXchange 暗示 - 用于使您的服务可被发现,例如有人试图为您的服务编写客户端可以将他的浏览器和/或开发工具(如Visual Studio或svcutil)指向此端点,并通过定义的数据交换,客户端可以找出您的服务提供的内容服务方法和数据结构。

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

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

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