Служба WCF с режимом безопасности TransportCredentialOnly, вызывающим ошибку кода состояния HTTP 401 на IIS7

Я только что потратил 2 дня на отладку следующей ошибки, поэтому я решил поделиться своими выводами.

Сценарий таков: у меня есть служба WCF, размещенная на IIS7. Служба использует basicHttpBinding с режимом безопасности, установленным в TransportCredentialOnly. На веб-сайте включена анонимная аутентификация и аутентификация Windows. Пул Appliaction для веб-сайта работает под учетной записью домена, которая имеет все возможные права на физическую папку веб-сайта. Просмотр.svc для сервиса из Internet Explorer работал, но когда мы попытались вызвать метод сервиса от клиента, мы получили ошибку: "HTTP-запрос не авторизован с помощью схемы аутентификации клиента Negotiate". Кроме того, журнал IIS показывал ошибку 401,5 для каждого вызова метода, что является нормальным для этого параметра безопасности, но за ним должно следовать 200, чего здесь не было.

Наконец, нам удалось решить проблему, проверив настройки аутентификации на веб-сайте по умолчанию. Аутентификация Windows была отключена там. Мы включили его, и сервис начал работать. Можно подумать, что настройки веб-сайтов переопределяют это, но они этого не делают. Так что уберегите себя от проволоки, собираясь весь день, и проверьте эту настройку.

Ура!

1 ответ

Это проблема, когда вам нужно настроить параметры на всех уровнях:

  • App.config на клиенте
  • Настройки IIS
  • Идентификация пула приложений
  • Права NTFS на файл SVC
  • Web.Config на сервере

Все это должно соответствовать, чтобы это работало.

Другие вопросы по тегам