Ошибка балансировки нагрузки с сервисом WCF - NLB - PullRequest
5 голосов
/ 24 января 2009

ОБНОВЛЕНИЕ 3:
Я создал тестовый проект Visual Studio 2008 и попытался создать ссылку на службу для ссылки на службу WCF общего сайта и получил следующую ошибку:

Произошла ошибка при загрузке «http://apps.mydomain/MyService.svc'. Запрос не выполнен с HTTP-статусом ошибка 400, неверный запрос. Метаданные содержат ссылка, которая не может быть решена: «http://apps.mydomain/MyService.svc'. Тип контента приложения / мыло + xml; charset = utf-8 не поддерживается оказание услуг http://apps.mydomain/MyService.svc'. Привязки клиента и сервиса могут быть несовпадающими. Удаленный сервер вернулся ошибка: (415) Не удается обработать сообщение, потому что тип содержимого «Приложения / мыло + XML; кодировка = UTF-8' не был ожидаемый тип 'text / xml; charset = utf-8 '.. Если служба определяется в текущем решении, попробуйте построение решения и добавление сервисная ссылка снова.

ОБНОВЛЕНИЕ 2:
@Nick - Я попробовал ваше предложение о точной установке адреса каждой конечной точки с указанием полного пути каждого сервера, и я все еще получаю тот же результат.

Кроме того, когда я пытаюсь установить атрибут listenUri с URL-адресом общего сайта, я получаю ошибку 400 неверных запросов вместо ошибки 404.

ОБНОВЛЕНИЕ
После некоторых дополнительных исследований возникли некоторые конфликты параметров конфигурации IIS между http://apps1.mydomain и http://apps2.mydomain, и он смог обойти ошибку «Серверное приложение недоступно».

Теперь я получаю сообщение об ошибке 404 при попытке перейти к общему сайту (http://apps.mydomain),, но я могу перейти к справочнику услуг http://apps1.mydomain и http://apps2.mydomain.

Исходная задача

Моя компания использует Microsoft NLB для балансировки трафика между нашими серверами IIS. Недавно я развернул службу WCF на всех серверах IIS 6 Windows Server 2003 Standard Edition с пакетом обновления 1 (SP1). Я получил следующую ошибку при попытке перейти к общему имени домена с помощью IE 7:

Серверное приложение недоступно веб-приложение, которое вы пытаетесь доступ на этом веб-сервере в настоящее время недоступен. Пожалуйста, нажмите «Обновить» кнопка в вашем веб-браузере, чтобы повторить попытку ваш запрос.

Примечание администратора: сообщение об ошибке детализируя причину этого конкретного Ошибка запроса может быть найдена в журнал событий приложения в Интернете сервер. Пожалуйста, просмотрите эту запись журнала чтобы выяснить, что вызвало эту ошибку происходят.

Потребитель будет указывать на http://apps.mydomain для использования службы, но виртуальный домен сопоставляется с http://apps1.mydomain или http://apps2.mydomain. Если я обращаюсь к службе на каждом сервере, не получить эту ошибку.

В настоящее время служба использует анонимную базовую HttpBinding.

Кто-нибудь еще сталкивался с этой проблемой?

История

До того, как эта ошибка начала возникать, я получил следующую ошибку, когда мне показывали все три имени домена (http://apps.mydomain, http://apps1.mydomain, http://apps2.mydomain):

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

Я использовал класс ServiceHostFactory , чтобы настроить мой файл .svc для указания фабрики пользовательских сервисов. Затем я создаю нашу собственную фабрику, наследуя ее от ServiceHostFactory и переопределяя при необходимости.

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        return new ServiceHost(serviceType, baseAddresses[0]);
    }
}

<%@ ServiceHost Language="C#" Factory="MyFactory" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>

Ответы [ 2 ]

2 голосов
/ 29 января 2009

После некоторых экспериментов с различными конфигурациями для моей службы WCF и приложения-потребителя. Я создал ссылку на службу для одной из рабочих ссылок службы (http://apps1.mydomain или http://apps2.mydomain) в приложении-потребителе. Затем я изменил ссылку на конечную точку в конфигурации клиента, чтобы она указала на адрес WCF общего сайта ( http://apps.mydomain) и я смог использовать и использовать эту услугу.

1 голос
/ 28 января 2009

У меня раньше была проблема с WCF и балансировкой нагрузки, когда на серверах было несколько сетевых карт с разными IP-адресами, а WCF просто выбирал первый найденный IP-адрес. Мы должны были явно установить IP-адрес в определении службы каждого сервера, чтобы WCF связывался с правильным.

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