Добро пожаловать в Записки дилетанта Войти|Регистрация | Помощь
IIS 7, Custom Modules & Global.asax

Во время разработки нового сайта нарвался но интересную особенность работы Global.asax в IIS 7. Ситуация была очень простая - есть кастом аутентификация (перекрестное использование Forms Authentication с Windows Live ID  и Open ID, но пр это я как-нибудь позже напишу) плюс кастом модуль, обрабатывающий запросы к html файлам. И все вроде как работало замечательно на тестовом серваке на машине (а у меня виста и тестирую я естесственно на IIS 7) ровно до той поры, пока не начал тестировать функционал как раз таки на html страницах - я с безмерным удивлением обнаружил, что на них юзер не аутентифицирован Surprise. Быстрый дебаг показал что таки да - при запросе html страниц и срабатывании моего кастом хендлера события из Global.asax попросту не вызываются Angry

В первый момент я даже растерялся как-то Smile Непонятно чего искать же и по чем гуглить Wink. Решил в итоге поступить по мудрому совету "если не знаешь как делать - почитай доку". И достаточно быстро в MSDN в статье ASP.NET Application Life Cycle Overview for IIS 7.0 нарвался на вот такой абзац: "You can provide application event handlers in the Global.asax file to add code that executes for all requests that are handled by ASP.NET, such as requests for .aspx and .axd pages. However, handler code in the Global.asax file is not called for requests for non-ASP.NET resources, such as static files. To run managed code that runs for all resources, create a custom module that implements the IHttpModule interface. The custom module will run for all requests to resources in the application, even if the resource handler is not an ASP.NET handler." который и объяснил причины моих неудач Wink. Ну и решение для лечение нарисовалось простое - быстренько слепил еще один кастом модуль с кодом из global.asax, подключил его к сайту и все заработало. Да и обратная совместимость вполне не была этим нарушена - подключив этот модуль через web.config можно получить тот же самый функционал и в старых веб приложениях на IIS7.

Так что имейте в виду - на веб приложениях, работающих на IIS 7 код из global.asax вызывается только для нативных asp.net запросов, а не для всех запросов к сайту (пусть даже они и обрабатываются ASP.NET-ом).

Posted: Thursday, December 13, 2007 3:34 PM от Дмитрий Руденко
Метки (ключевые слова): , ,

Комментарии:

Нет Комментариев

Новые Комментарии отключены.