Как можно сбалансировать нагрузку службы WCF, размещенной на IIS 6? - PullRequest
7 голосов
/ 23 сентября 2008

Мы используем BigIP для балансировки нагрузки между нашими двумя серверами IIS. Недавно мы развернули службу WCF, размещенную на IIS 6, на этих двух серверах Windows Server 2003R2.

Каждый сервер настроен с двумя заголовками узлов: один для адреса балансировщика нагрузки, а затем второй заголовок узла, который указывает только на этот сервер. Таким образом, мы можем ссылаться на конкретный сервер в группе с балансировкой нагрузки для отладки.

Поэтому, когда мы запускаем, мы сразу получаем ошибку:

Эта коллекция уже содержит адрес со схемой http. В этой коллекции может быть не более одного адреса на схему. Имя параметра: элемент

Я провел некоторое исследование, и мы можем внедрить фильтр, чтобы он игнорировал один из хостов, но тогда мы не можем получить доступ к серверу с этого адреса.

<serviceHostingEnvironment>
    <baseAddressPrefixFilters>
        <add prefix="http://domain.com:80"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

Какое наилучшее решение в этом сценарии позволило бы нам подключиться к службе WCF через http://domain.com/service.svc и http://server1.domain.com/service.svc?

Если нам нужно создать нашу собственную ServiceFactory, как предлагают некоторые сайты, есть ли у кого-нибудь образец кода по этому поводу?

Любая помощь очень ценится.

РЕДАКТИРОВАТЬ: нам нужно будет иметь доступ к службе WCF с любого из двух адресов, если это вообще возможно.

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 ноября 2008

На вашем bigIP Создайте 2 новых виртуальных сервера http://server1.domain.com/ http://server2.domain.com/

создайте пул для каждой VS только с определенным сервером в нем - таким образом, не будет никакой фактической балансировки нагрузки и доступ к ней таким образом. Если вам не хватает внешнего IP-адреса, вы все равно можете использовать тот же IP-адрес, что и ваше производственное доменное имя, и просто использовать IRULE для направления трафика в соответствующий пул

Надеюсь, это поможет

0 голосов
/ 05 октября 2008

Когда вам нужно протестировать конкретную машину, вы можете «обойти» балансировку нагрузки и убедиться, что правильный заголовок хоста отправляется на поддержание WCF, отредактировав файл «hosts» на машине, с которой вы тестируете, так, например:

10.0.0.11–10.0.0.16 - это шесть хостов в кластере «cluster.mycompany.local» с IP-адресом с балансировкой нагрузки 10.0.0.10. При тестировании вы можете добавить в файл хостов машин строку с надписью «10.0.0.13 cluster.mycompany.local», чтобы иметь возможность напрямую поразить третью машину в кластере.

0 голосов
/ 23 сентября 2008

Используемый URL-адрес основан на привязках в IIS. Есть ли на сайте более одной привязки? Если да, или служба WCF используется несколькими сайтами? Если это так, то вы SOL AFAIK. Мы столкнулись с этим вопросом. По сути, для HTTP может быть только одна привязка IIS, в противном случае это бомбы.

Также, вот информация о реализации ServiceHostFactory . Это сработает, если возможно, что ваша служба WCF будет доступна только через 1 адрес (к сожалению, для нас это было невозможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...