Как можно сбалансировать нагрузку на службу WCF, размещенную в IIS 6?
-
02-07-2019 - |
Вопрос
Мы используем 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 с любого из двух адресов, если это вообще возможно.
Спасибо.
Решение
На вашем bigIP создайте 2 новых виртуальных сервера.http://server1.domain.com/ http://server2.domain.com/
создайте пул для каждой VS, содержащий только определенный сервер, чтобы не было фактической балансировки нагрузки и доступа к нему таким образом.Если у вас мало внешних IP-адресов, вы все равно можете использовать тот же IP-адрес, что и ваше рабочее доменное имя, и просто использовать правило для направления трафика в соответствующий пул.
Надеюсь это поможет
Другие советы
Используемый URL-адрес основан на привязках в IIS.Имеет ли веб-сайт более одной привязки?Если да, или служба WCF используется несколькими сайтами?Если это так, то вы SOL AFAIK.Мы столкнулись с этой проблемой.По сути, привязка IIS для HTTP может быть только одна, иначе произойдет сбой.
Также здесь информация о реализация ServiceHostFactory.Это БУДЕТ работать, если возможно, что ваша служба WCF будет доступна только через 1 адрес (к сожалению для нас, это было невозможно).
Когда вам нужно протестировать конкретную машину, вы можете «обойти» балансировку нагрузки и убедиться, что правильный заголовок хоста отправлен, чтобы 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», чтобы иметь возможность напрямую подключаться к третьей машине в кластере.