Вопрос

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

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

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

Кроме того, когда я пытаюсь установить атрибут listenUri с URL-адресом общего сайта, я получаю ошибку 400 bad request вместо ошибки 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 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" %>
Это было полезно?

Решение

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

Другие советы

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

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