Как можно сбалансировать нагрузку на службу WCF, размещенную в IIS 6?

StackOverflow https://stackoverflow.com/questions/122688

  •  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», чтобы иметь возможность напрямую подключаться к третьей машине в кластере.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top