暴露net.tcp端点

我对如何在WCF中公开端点感到困惑

我有一个tcp端点和一个mex tcp端点。

         

当我尝试在服务主机中运行它时,我得到以下exception:

在服务MessageReaderService实现的合同列表中找不到合同名称“IMetadataExchange”。 添加ServiceMetadataBehavior到
配置文件或直接向ServiceHost启用对此合同的支持。

所以我从这个错误中得出结论,我需要添加一个服务行为来公开元数据。

所以我添加了这个行为:

    

但后来我得到了一个不同的错误:

ServiceMetadataBehavior的HttpGetEnabled属性设置为true,HttpGetUrl属性是相对地址,但没有http基址。 提供http基址或将HttpGetUrl设置为绝对地址。

  1. 那么现在我必须实际添加另一个端点(http)以通过mexhttpbinding公开元数据?
  2. 是否有一种通过tcp公开端点的简单方法?

两件事情:

(1)一旦您定义了服务行为,您当然也必须将其应用于服务!

  

(2)您不需要HTTP端点 – 您不需要拥有HTTP URL – 只需定义此服务行为,如下所示:

    

您的元数据现在可通过mexTcpBinding端点获得 – 您无法使用HTTP浏览到它,但客户端绝对可以连接到它并使用它!

您可以使用WCF测试客户端validation这一点,然后转到其中

 net.tcp://localhost:8082 (the base address) 

要么

 net.tcp://localhost:8082/mex (the mex address) 

在这两种情况下,WCF测试客户端现在应该找到您的服务并能够发现其function。