2010-11-12 38 views
11

我有一个WCF服务作为Windows服务托管。我们希望在相同的地址启用mex端点(但使用'/ mex'后缀)。我一直在努力做这(失败)使用以下配置:如何强制net.tcp mex端点(mexTcpBinding)参与端口共享?

<system.serviceModel> 

    <services> 
    <service 
     name="MyCompany.MyService" 
     behaviorConfiguration="defaultServiceBehavior"> 

     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost"/> 
     </baseAddresses> 
     </host> 

     <endpoint 
     address="MyService" 
     binding="netTcpBinding" 
     contract="MyCompany.IMyService" 
     bindingConfiguration="netTcpBindingConfig" 
     /> 

     <endpoint 
     address="MyService/mex" 
     binding="mexTcpBinding" 
     contract="IMetadataExchange" 
     /> 

    </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="defaultServiceBehavior"> 
     <serviceMetadata /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 

    <bindings> 
    <netTcpBinding> 
     <binding name="netTcpBindingConfig" portSharingEnabled="true" /> 
    </netTcpBinding> 
    </bindings> 

</system.serviceModel> 

当它运行时,服务主机引发AddressAlreadyInUseException抱怨“已经有上IP端点0.0.0.0:808侦听器”。这实际上对我来说很有意义,因为端口共享服务已经打开了该端口,以便服务MyService端点以及请求在该机器上共享该端口的任何其他服务。

如此看来,MEX终结点希望端口808 EXLUSIVE访问我可以解决此通过调整MEX终结,像这样:

<endpoint 
    address="net.tcp://localhost:818/MyService/mex" 
    binding="mexTcpBinding" 
    contract="IMetadataExchange" 
    /> 

这意味着MEX终结,现在有自己的专用港口。其缺点是,任何想要公开mex端点的其他服务都需要为其mex端点提供一个唯一的端口。这使得在寻找mex端点时非常难以预测。

有没有办法强制mex端点参与端口共享?

+0

只是一个想法:添加bindingConfiguration =“netTcpBindingConfig” 的MEX终结? – 2010-11-12 15:30:36

+0

@Torben是的,我试过了。当我这样做时,mex端点没有共享问题,但它完全无法生成任何元数据。 – 2010-11-12 15:44:00

回答

8

两个选项:

  1. 最简单的办法:改变整个的MEX点NetTcpBinding的结合,并让它重用你bindingConfiguration。 mexTCPBinding只是为了方便,并且是可选的。如果它不适合你,不要使用它。

  2. 难办法:您可以修改mexTCPBinding以启用共享。我见过的唯一的例子是在代码在这里:http://blogs.msdn.com/b/drnick/archive/2006/08/23/713297.aspx

+0

感谢您的回复。我试着改变mexTcpBinding netTcpBinding但没有骰子。当我这样做时,服务启动,并没有抱怨共享问题(这很酷),但完全无法响应mex请求(这是不酷的)。据推测,如果我使用netTcpBinding,我还没有意识到需要配置其他东西? – 2010-11-15 09:42:30

+0

@Damian你有没有解决过这个问题?奇怪的是,我们在本地机器上看到了这个问题,但没有在生产中 – 2012-03-08 15:23:41

+1

简单的方法适用于我(选项1)。 – 2012-04-11 23:31:08