WCF唯一基地址问题

时间:2011-06-03 10:05:37

标签: .net wcf nettcpbinding mex netnamedpipebinding

我遇到WCF报告的问题......

无法激活

net.pipe://192.168.0.100/SystemA/Service1.svc/mexPipe'。

我已经定义了我的基地址如下:

服务1 ......

<baseAddresses>
    <add baseAddress="http://192.168.0.100:8050/ProductsService/Service1.svc" />
    <add baseAddress="net.tcp://192.168.0.100:8051/ProductsService/Service1.svc" />
    <add baseAddress="net.pipe://192.168.0.100/ProductsService/Service1.svc" />
</baseAddresses>

服务2 ......

<baseAddresses>
    <add baseAddress="http://192.168.0.100:8050/ProductsService/Service2.svc" />
    <add baseAddress="net.tcp://192.168.0.100:8051/ProductsService/Service2.svc" />
    <add baseAddress="net.pipe://192.168.0.100/ProductsService/Service2.svc" />
</baseAddresses>

对于每个服务,我然后按如下方式定义Mex端点......

<endpoint address="mexPipe" contract="IMetadataExchange" binding="mexNamedPipeBinding" />

这肯定会给我2x mex端点,如下所示......

net.pipe://192.168.0.100/ProductsService/Service1.svc/mexPipe
net.pipe://192.168.0.100/ProductsService/Service2.svc/mexPipe

但是我不认为这是在查看这篇文章......

net.tcp binding metadata problem

海报似乎与我有类似的配置,响应者声明基本地址在每个方案中并非“独特” - 但他们肯定都是因为它们都引用了两个独特的服务?

WCF可以检测到我的mex端点是netNamedPipe并查找它们的基地址吗?鉴于绑定是“mexNamedPipeBinding” - 或者这不起作用?

1 个答案:

答案 0 :(得分:1)

您的基地址不应包含服务文件名。您将在端点声明中指定它。

如您所见,您的观点是:

  

net.pipe://192.168.0.100/ProductsService/Service1.svc/mexPipe   net.pipe://192.168.0.100/ProductsService/Service2.svc/mexPipe

由于服务文件中没有mex端点的文件夹,因此肯定无法正确。

而是将您的基地定义为:

<baseAddresses>
  <add baseAddress="net.pipe://192.168.0.100/ProductsService" />
</baseAddresses>

和您的终端:

<endpoint address="mexPipe" contract="IMetadataExchange" ... />

你会发现你的mex端点变为:

net.pipe://192.168.0.100/ProductsService/mexPipe

看起来是正确的。