Проблема уникальных базовых адресов WCF

У меня есть проблема, когда 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

Похоже, что у автора есть конфигурация, аналогичная мне, и респондент заявляет, что базовые адреса не являются "уникальными" в каждой схеме - но, несомненно, они оба ссылаются на две уникальные службы?

Может ли WCF обнаружить, что мои конечные точки mex являются netNamedPipe, и найти для них базовый адрес? Учитывая, что привязка "mexNamedPipeBinding" - или это не работает?

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

Который выглядит правильно.

Другие вопросы по тегам