404 BadRequest предоставление службы WCF через внешний IP с использованием заголовков узлов IIS - PullRequest
3 голосов
/ 16 февраля 2009

Мы размещаем веб-сервис WCF на Windows Server 2003. Этот сервер имеет только 2 внутренних IP-адреса. Мы хотим выставить сервис извне. Это делается через брандмауэр, который сопоставляет внешний IP-адрес со службой.

Итак, мне нужно изменить службу для отображения этого внешнего IP-адреса для внутренних ссылок. Это не проблема, так как она должна использоваться только снаружи.

Изменение значения заголовка узла в IIS дает ответ «Неверный запрос (неверное имя узла)» от IIS. Я также добавил значение 'address' к записи конечной точки в файле web.config ... но оно просто указывает на внутреннее имя компьютера. Есть идеи?

edit: я могу убедиться, что IIS7 работает точно так же. Адрес не работал. Другое имя хоста выдало ошибку Invalid Hostname. Нет ли серьезного способа представить другой (вымышленный) IP? : /

edit2:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicAnonymous">
                <security mode="None"/>
            </binding>
        </basicHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Extended">
                <serviceMetadata httpGetEnabled="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
    </diagnostics>
    <services>
        <service behaviorConfiguration="Extended" name="AnCWCFWebService.ProductInfoProvider">
            <endpoint address="" binding="basicHttpBinding" name="ASMX" bindingConfiguration="BasicAnonymous" contract="AnCWCFWebService.Interfaces.IProductInfoProvider"/>
        </service>
    </services>
</system.serviceModel>

Ответы [ 3 ]

7 голосов
/ 20 февраля 2009

404 BadRequest из-за конфигурации IIS ...

Если вы получаете сообщение об ошибке 404 BadRequest от IIS после попытки изменить заголовки хоста в IIS, это часто встречается, но есть исправление!

Исправление путем внесения изменений в конфигурацию IIS

Как WCF может поддерживать несколько привязок IIS, указанных для сайта?:
http://tinyurl.com/55q5hg

Исправление путем внесения изменений в код WCF

Кроме того, в следующей статье объясняется, как один разработчик решил эту проблему с помощью комбинации конфигурации и кода:

Ну, это было весело! Приключение в WCF, SSL и заголовках хоста
http://geekswithblogs.net/rakker/archive/2008/07/03/123562.aspx

В статье упоминаются две важные ссылки ...

Первый объясняет, как правильно установить заголовки хоста в IIS:

После работы заголовков хоста вы обнаружите, что ...

"вы не можете иметь более одного хоста заголовок для IIS или wcf сломается "

Решение обойти это ограничение можно найти в этой статье, а также есть комментарий к статье GeeksWithBlogs.net выше, который предоставляет расширенный вариант:

Если вы все еще испытываете проблемы, сообщите нам об этом в комментариях ниже ...


Если служба не работает ...

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

В теории (не так много на практике из-за архитектурных различий) настройка службы WCF в IIS не должна отличаться от настройки типичного виртуального каталога и соответствующего приложения для веб-приложения или веб-службы ASMX.

Поэтому я рекомендую, чтобы, если это первая служба WCF, которую вы открываете для Интернета, следуйте тому же простому подходу, который вы использовали бы при показе своего первого веб-сайта. По сути, создайте новый образец «Приложение службы WCF» (это доступно в диалоговом окне «Добавить новый проект» в разделе «Веб» C # или VB).

Как только он заработает, следуйте рекомендациям по развертыванию, чтобы переместить его в рабочую изолированную программную среду и протестировать его локально. В этой изолированной программной среде предпочтительно уже установлены некоторые веб-сайты или веб-службы, о которых известно, что они доступны из Интернета, чтобы устранить любые сомнения относительно типичных проблем конфигурации сети. Если у вас есть образец веб-службы ASMX, который уже успешно открыт в Интернете с этого сервера, это было бы лучше.

Затем попробуйте протестировать службы ASMX и WCF из веб-браузера, как локально на сервере, так и внутри других рабочих столов, а затем, наконец, извне.

Тестирование URL

Мы хотим проверить доступ к стандартным файлам SVC и ASMX из веб-браузера во всех разновидностях URL-адресов, которые доступны и актуальны. Результаты должны быть похожими, со сводной страницей об оказании услуг в окне. Разница будет в том, что сводка веб-службы ASMX, вероятно, позволит вам выполнить веб-методы в службе, если эта функция не отключена в файле web.config.

Сравнить результаты браузерной выборки следующих стилей URL-адресов ...

  • http://localhost/WcfService1/Service1.svc
  • http://localhost/WcfService1/Service1.asmx
  • http://MachineName или MachineFQN / WcfService1 / Service1. svc
  • http://MachineName или MachineFQN / WcfService1 / Service1. asmx
  • http://MachineLocalIP # 1 / WcfService1 / Service1. SVC
  • http://MachineLocalIP # 1 / WcfService1 / Service1. ASMX
  • http://MachineLocalIP # 2 / WcfService1 / Service1. SVC
  • http://MachineLocalIP # 2 / WcfService1 / Service1. ASMX
  • http://ExternalIP/WcfService1/Service1.svc
  • http://ExternalIP/WcfService1/Service1.asmx

Все эти тесты должны возвращать похожие результаты.

Методы тестирования сервиса

Если вам это нравится, отправляйтесь в веб-сервис ASMX и протестируйте некоторые веб-методы на наличие любого из протестированных URL-адресов в веб-браузере. Вскоре вы увидите, что мы можем тестировать веб-сервисы ASMX и другим способом ...

Далее мы протестируем веб-методы как службы WCF, так и веб-службы ASMX с помощью приложения WcfTestClient.exe , которое находится в дистрибутиве Visual Studio 2008 ( C: \ Program). Файлы \ Microsoft Visual Studio 9.0 \ Common7 \ IDE ).

Вам нужно будет добавить службы через пункт меню Файл-> Добавить службу , указав приведенный выше URL-адрес для каждого URL-адреса службы, который вы хотите проверить. Убедитесь, что вы указали имя файла SVC и ASMX. Если все хорошо, конечная точка MEX, которая активируется атрибутом «httpGetEnabled» элемента <serviceMetadata/> в файле web.config, вернет данные, необходимые для работы утилиты, заполнив дерево инвентаризацией наши методы обслуживания, как это:

http://i.stack.imgur.com/mNK8l.jpg

С этого момента будет полезно сослаться на следующие ресурсы:

Заключение

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

Не забудьте относиться к службе WCF как к веб-службе ASMX во время диагностики, предполагая, что web.config, как известно, настроен правильно.

Если вы все еще не можете заставить что-либо работать, обратитесь к этому руководству за дополнительной технической консультацией:

Наконец, если ничего не помогает, просто включите службу WCF в веб-службу ASMX:

1 голос
/ 24 февраля 2009

Почему бы просто не назначить новый IP-адрес серверу вместо того, чтобы возиться с именами хостов? Сервер Windows может иметь несколько IP-адресов для одного сетевого адаптера.

Здесь - статья, в которой об этом говорится.

1 голос
/ 21 февраля 2009

Вам просто нужно настроить заголовок вашего хоста в IIS, чтобы ссылки в ссылках WSDL использовали имя donmain, а не имя локальной машины.

Выезд Действия по настройке заголовка узла IIS, чтобы WCF использовал имя домена в ссылках WSDL.

...