WCF: несколько привязок в TCP.NET - PullRequest
4 голосов
/ 27 мая 2011

Я пытаюсь настроить веб-сайт под IIS 7.5 с несколькими привязками tcp.net.

Поскольку служба находится за балансировщиком нагрузки, мне нужно несколько конечных точек для службы:

log.o1881.no/log/service.svc

log.core1.o1881.no / log / service.svc

это работает для привязок http, когда я настраиваю в web.config:

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

При добавлении на сайт следующих привязок tcp.net появляется следующее сообщение:

808: log.o1881.no

808: log.core1.o1881.no

Ошибка сервера в приложении '/ Log'.

Эта коллекция уже содержит адрес со схемой net.tcp.В этой коллекции может быть не более одного адреса на схему.Если ваша служба размещается в IIS, вы можете решить эту проблему, установив 'system.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled' в значение true или указав 'system.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters'.Имя параметра: item

Я также пытался добавить это в web.config:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
  <baseAddressPrefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

Это, однако, не работает.

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

Возможно ли это сделать или есть другой способ справиться с этим сценарием (несколько имен привязок наhttp и net.tcp, из-за балансировки нагрузки)?

Ответы [ 2 ]

1 голос
/ 28 марта 2013

В соответствии с документацией использование multipleSiteBindingsEnabled указывает WCF игнорировать любые <baseAddressPrefixFilters>.

"Любые настройки baseAddressPrefixFilters игнорируются для обоихПротоколы HTTP и не HTTP, когда с помощью этого параметра разрешено связывание нескольких сайтов. "

Таким образом, эта конфигурация противоречит самой себе, вы задаете префиксы адресов и одновременно указываете WCF игнорировать их, поскольку у вас есть указано значение multipleSiteBindingsEnabled .

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
  <baseAddressPrefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

Я думаю, что multipleSiteBindingsEnabled лучше всего подходит для сценариев, в которых вы заинтересованы только в использовании схем HTTP.

В противном случае не делайте 'использовать его, и на самом деле может иметь несколько привязок tcp.net на разных портах в одной иерархии IIS Site / App .

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="net.tcp://log.o1881.no:808/log" />
    <add prefix="net.tcp://log.core1.o1881.no:808/log" />
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

Надеюсь, это поможет другим:)

0 голосов
/ 21 февраля 2012

Насколько я нашел, это невозможно:

Если кто-то найдет решение для этого, пожалуйста, поделитесь ...

...