IIS7 зависает в состоянии AuthenticateRequest в модуле WindowsAuthentication - PullRequest
2 голосов
/ 14 июля 2009

Я запускаю приложение ASP.NET с пользовательским модулем, зарегистрированным под IIS7.

Пока два дня назад все не было нормально. Теперь я замечаю, что запросы начали зависать в состоянии AuthenticateRequest и в модуле WindowsAuthentication. Мой пользовательский модуль перехватывает состояние BeginRequest, обрабатывает запросы и завершает обработку запросов, используя HttpContext.Current.ApplicationInstance.CompleteRequest () Запросы, которые он не обрабатывает, остаются для IIS, чтобы передать их через другие модули для обработки.

Проблема (зависание запроса) возникает на страницах, которые мой пользовательский модуль не обрабатывает.

Есть идеи, с чего начать устранение этой проблемы? Я последовательно воспроизводил эту проблему на трех разных машинах сегодня. Я также обнаружил, что мы не меняли наш файл web.config в прошлом месяце.

Любая помощь в устранении этой проблемы приветствуется.

Спасибо заранее, Чарльз Пракаш Дасари

1 Ответ

0 голосов
/ 14 июля 2009

Наконец-то я нашел решение своей проблемы.

Пользовательский модуль, который я реализовал, использует асинхронные обработчики:

        context.AddOnBeginRequestAsync(
            new BeginEventHandler(BeginBeginRequest),
            new EndEventHandler(EndBeginRequest)
        );

В случае, когда мой модуль не обрабатывает запрос, обработчик события begin завершает запрос и не имеет к нему никакого отношения. Еще пару дней назад я прыгал в другой поток, чтобы обработать эти запросы в методе Begin, и недавно я исправил это так, что я переключался в другой поток, только если мой модуль должен обработать запрос. Теперь это вызвало проблему. Очевидно, IIS не нравится, что я завершаю свою обработку в том же потоке.

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

Мне все еще нужно исследовать и выяснить, почему это происходит - или это действительно ошибка в IIS, или то, как я возвращаю IAsyncResult из метода BeginBeginRequest. Но сейчас я знаю, что должен обработать этот запрос в другом потоке.

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