Периодические "401: Несанкционированные" исключения с сервера

У меня есть веб-сервис, который размещен в кластерной среде. Веб-приложение, которое вызывает эту службу, также размещено в кластерной среде, но на другом наборе серверов IIS6. Следовательно, серверами приложений являются appserv1 и appserv2, а серверами служб являются svcserv1 и svcserv2. Мы не контролируем, к каким серверам осуществляется доступ, поскольку обычно мы называем их либо appserv, либо svcserv соответственно.
Служба является службой WCF, но была создана для совместимости с платформой веб-службы.Net 2.0. Приложение работает нормально, когда оно работает, но, вероятно,> 35% времени, когда служба отвечает Исключением: Сбой запроса с состоянием HTTP 401: Несанкционированный. ошибка.

Я видел других, которые рекомендуют устанавливать учетные данные напрямую, и мое приложение делает это следующим образом.

Dim cc As New CredentialCache()
Dim service As WCFServiceRef.Reports

service = New WCFServiceRef.Reports

service.Url = serviceURL
cc.Add(New Uri(service.Url), "Negotiate", New NetworkCredential("username", "password"))
service.Credentials = cc

reportData = service.GenerateReport(reportid, True, parameters, "PDF", Environment)

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

Я также видел эту статью MSDN KB, но поскольку у меня нет прямого доступа к конфигурации сервера (и трудно что-либо изменить), я хотел быть уверен, что со стороны приложения я ничего не могу сделать. Обратите внимание, что сервер был настроен для проверки подлинности Windows и не разрешает анонимный доступ.

Спасибо!

3 ответа

Решение

Многое из этого зависит от того, используют ли ваши попытки аутентификации Kerberos или откат к NTLM. Я бы предложил использовать такой инструмент, как Fiddler, для захвата пакетов, отправляемых с вашего сервера приложений, для проверки того, какой протокол аутентификации используется.

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

  1. Попросите администраторов включить ведение журнала ошибок Kerberos на обоих серверах, затем повторите попытку проверки подлинности и проверьте наличие ошибок Kerberos в журналах событий. См. http://support.microsoft.com/kb/262177.
  2. Проверьте имена участников-служб, зарегистрированные для вашей службы - при условии, что полное доменное имя вашей службы - myservice.prd.ad, вам нужно два имени участника-службы - они должны быть зарегистрированы на серверах, на которых размещается ваша служба, если пул приложений IIS6 не работает как учетная запись службы, и должны быть зарегистрированы в сервисной учетной записи в противном случае:
    • HTTP / MYSERVICE.PRD.AD
    • HTTP / MYSERVICE
  3. Также убедитесь, что любые записи DNS, зарегистрированные для вашей службы, являются записями A (имя хоста), а не записями CNAME (псевдоним). Я столкнулся с некоторыми проблемами в средах, в которых я работал, где машины с XP/2003 пытались получить билет Kerberos для неправильного имени участника-службы, когда записи CNAME использовались для DNS (тогда как машины с Windows 7/2008 этого не делали).
  4. Вы также можете попробовать установить DelegConfig на своих сервисных серверах, это очень хорошо для решения самых распространенных проблем, возникающих у людей с аутентификацией Kerberos. См. http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1887

Надеюсь, это немного поможет. Если вы используете NTLM, у меня, к сожалению, не так много идей, так как я привык работать в средах только с Kerberos.

Прежде всего, проверьте журналы IIS на каждой машине и посмотрите, не произошли ли ошибки 401 с одной машины.

Следующее, что нужно проверить - это 401, связанные с конкретными URL-адресами.

Еще одна вещь, чтобы рассмотреть:

Вам нужны липкие сессии? Есть ли серверы, которые перерабатывают слишком часто?

Существует множество причин, по которым вы можете получить 401-й, поэтому вам просто нужно покопаться и выяснить, что происходит.

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