2012-01-16 3 views
0

Я постараюсь, чтобы этот вопрос был как можно более кратким, так как проблема немного сложная, чтобы объяснить мне. Пожалуйста, задавайте любые вопросы, если что-то остается неясным. Итак, вы здесь,Невозможно получить аутентификацию службы WCF, работающую с IIS 6.0

Это сообщение об ошибке, которое я получаю некоторое время, когда я работаю над этим, «HTTP-запрос неавторизован с помощью схемы аутентификации клиента« Ntlm ». Заголовок проверки подлинности, полученный с сервера был «Negotiate, NTLM». Удаленный сервер возвратил ошибку: (401) Unathorized «

У меня есть два окна Windows, Box1 и Box2. У меня есть 2 службы WCF (ServiceA и ServiceB), размещенные в IIS 6 для каждого из них. Функционально ServiceA ведет переговоры только с db. ServiceB ведет переговоры с ServiceA и получает результаты. Обе службы имеют анонимный доступ и включена встроенная проверка подлинности Windows. ServiceA работает под пулом приложений ServiceAPool, а ServiceB работает под ServiceBPool. Каждый из этих пулов приложений настроил идентификатор пользователя домена. Эти пулы приложений одинаковы для Box1 и Box2.

Во-первых, мое клиентское приложение (только небольшое консольное приложение) вызывает службу ServiceA on Box1 с моими учетными данными Windows. Оно работает.

Во-вторых, мое клиентское приложение вызывает ServiceB on Box1 с моими учетными данными Windows. Этот ServiceB вызывает ServiceA внутренне с пользователем домена (идентификатор пула приложений). Он работает.

Второй пункт, упомянутый выше, не работает на Box2, он дает вышеприведенную ошибку. Чтобы быть ясным, код службы, включая файл web.config и т. Д., В обоих случаях точно такой же. Пользователь домена для пула приложений тот же. Обе коробки находятся в одном домене.

Что я наблюдал (возможно), на Box2, когда я вызываю ServiceA с моими учетными данными в Windows, он работает, но когда есть переключение между службами с какой-либо другой учетной записью домена (например, моя учетная запись в приложении), это не работает с ошибкой выше.

Если кто-либо видел такое поведение, поделитесь некоторой информацией.

+0

Не ясно, когда ошибка авторизации происходит на Box2. От клиента => serviceB или serviceB => serviceA? В любом случае вы должны проверить разрешение IIS для веб-сайтов/приложений, на которых размещены службы на box2, такие же, как на box1. –

+0

Ну, проблема возникает из serviceB => serviceA. Проблема возникает между вызовами, которые происходят из одной службы в другую. По какой-то причине похоже, что идентификатор пула приложений не используется и выдается за него, но не уверен. – theraneman

+0

Настройка обоих служб для анонимного доступа и проверки подлинности Windows не кажется правильным. Я думаю, что ключ заключается в том, что сервер устанавливает схему авторизации с «переговоры» в дополнение к NTLM, но клиент настроен только для NTLM. Попробуйте отключить анонимный доступ к обеим службам и посмотрите, не изменит ли это значение или, по крайней мере, создает другое сообщение об ошибке. –

ответ

1

Я хотел бы опубликовать ответ на свой вопрос. Он оказался обновленным ключом реестра, чтобы получить работу по проверке подлинности. В основном речь шла об отключении значения «DisableLoopbackCheck». Более подробную информацию можно найти на сайте

http://blogs.msdn.com/b/distributedservices/archive/2009/11/10/wcf-calling-wcf-service-hosted-in-iis-on-the-same-machine-as-client-throws-an-authentication-error.aspx

http://support.microsoft.com/default.aspx?scid=kb;EN-US;926642