Что вызывает «HTTP-статус 401: ОК» - PullRequest
2 голосов
/ 04 сентября 2011

У меня есть веб-служба ASP.NET, когда я иногда вызываю ее, она возвращает правильный ответ, в других случаях возвращает исключение The request failed with HTTP status 401: OK. Может кто-нибудь сообщить мне некоторые причины, по которым это может происходить? Поскольку я не могу найти что-либо по HTTP 401 и сообщению OK, так как 200 в порядке, а 401 не авторизован ... Почему моя веб-служба, размещенная в IIS6, возвращает это?

Вот подробности прямого исключения:

Message:
    The request failed with HTTP status 401: OK.
Stack Trace:
    at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    at ws.Main.MethodName(param1, param2)

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

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

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Я нашел причину и получил ответ.

Проблема была вызвана тем, что несколько потоков обращались к WebService одновременно по одному и тому же каналу TCP. Это заставило IIS сбросить квитирование аутентификации, и в результате приложение получило исключения HTTP 401 UNAUTHORIZED вместо сообщения 200 OK, .NET сообщило, что ответ был HTTP 401 OK, однако с помощью WireShark я смог определить, что содержимое все еще было HTTP 401 UNAUTHORIZED.

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

Решением было написать новый прокси-класс, который будет включать наш автоматически сгенерированный прокси-класс ws (из WSDL) и реализовать объект SYNCLOCK для каждого метода в этом новом прокси-классе.

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

1 голос
/ 04 сентября 2011

401 Несанкционированный

Аналогично 403 Запрещено, но специально для использования при аутентификации возможно, но не удалось или еще не было предоставлено.

Это означает, что у вас нет разрешения на ресурс, к которому вы пытаетесь получить доступ, и что аутентификация может иметь значение. Я не думаю, что OK является относительным, хотя это необычно. Проверьте фактический код статуса Http в Fiddler , чтобы быть уверенным.

И наоборот:

403 Запрещено

Запрос был законным, но сервер отказывается отвечать к этому. В отличие от несанкционированного ответа 401, аутентификация не разница.

Служба на ферме? Возможно, один сервер настроен неправильно.

На основании вашего последнего комментария вы должны убедиться, что нет утечек ресурсов, вызывающих неожиданное поведение. Если вы используете базу данных, убедитесь, что вы утилизируете одноразовые предметы и т. Д., Профилируйте сервер для мониторинга использования памяти. Рассмотрим асинхронные службы, чтобы пул потоков оставался свободным, если у вас есть длинные выполняющиеся запросы. Проверьте журналы событий.

I думаю Возможно, я видел подобное поведение, когда IIS не может обработать аутентифицированный трафик, он просто взрывается с 401. Я никогда не замечал ОК, но вполне мог произойти в этом сценарии.

0 голосов
/ 04 сентября 2011

401 означает, что вы пытаетесь получить доступ к защищенному паролем ресурсу, не включая в запрос какую-либо информацию для аутентификации.Убедитесь, что вы не настроили сервер неправильно, чтобы запрашивать пароли для URL-адреса, возвращающего ответ, а также убедитесь, что все запросы относятся к одному и тому же домену: вы можете непреднамеренно отправлять запросы в защищенный паролем домен (например,в прошлом использовался отдельный хост для обслуживания статических файлов, но на виртуальном хосте статических файлов была настроена базовая аутентификация HTTP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...