Win32 ISAPI и ASP.NET

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Win32 ISAPI и ASP.NET

Сообщение ura »

Привет всем
у меня есть пара ISAPI фильтров которые работают на IIS 6.
Проблема в том, что они работают нормально только с HTML, ASP, PHP сайтами но не работают с ASP.NET.

Я наивно полагал, что процесс обработки в ISAPI проходит уже на выходе страницы из IIS - однако всетаки какая то засада сидит в ASP.NET. Может кто знает в чем дело или сталкивался с подобным?

Спасибо
Аватара пользователя
Аман Ванкуверский
Маньяк
Сообщения: 2759
Зарегистрирован: 18 окт 2005, 01:10

Сообщение Аман Ванкуверский »

я недавно сталкивался при апгрейде IIS с 5 до 6. тоже думал сначала думал что ISAPI фильтры не работают, потом обнаружил что в 6-ке какая-то петрушка с Request.ServerVariables и обрабаткой параметров HTTP_*. Решилось изменением имен передаваемых параметров.

http://channel9.msdn.com/ShowPost.aspx?PostID=184522
http://support.microsoft.com/default.aspx?kbid=294217
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

Странно, ведь работает для всего кроме ASPX. В моем случае я в фильтрах не пользуюсь никакими серверными переменными и в хедерах IIS все вроде бы нормально. Функция фильтра просто не вызывается и точка, может чего в секьюрити надо поправить.
Аватара пользователя
Аман Ванкуверский
Маньяк
Сообщения: 2759
Зарегистрирован: 18 окт 2005, 01:10

Сообщение Аман Ванкуверский »

ura писал(а):Странно, ведь работает для всего кроме ASPX. В моем случае я в фильтрах не пользуюсь никакими серверными переменными и в хедерах IIS все вроде бы нормально. Функция фильтра просто не вызывается и точка, может чего в секьюрити надо поправить.
похоже на отключенный aspx. а как именно функции не вызываются?
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

В IIS для нужного сервера зарегистрирован ISAPI filter (Win32 ISAPI DLL) в котором согласно интерфейса есть функция

DWORD WINAPI __stdcall HttpFilterProc(HTTP_FILTER_CONTEXT *pfc, DWORD NotificationType, VOID *pvData)

эта функция вызывается из IIS каждый раз когда страница готова к отправке в браузер. Проблема пока что в том, что этот вызов cрабатывает для обычных HTML страниц, ASP, PHP и не срабатывает для ASPX страниц. Т.е. либо что то в IIS что не дает это делать для .NET приложений либо что то недоконфигурировано. Пока ковыряюсь в Гугле и особенно ничего не нахожу, может это где то на поверхности совсем. :?:
Аватара пользователя
Аман Ванкуверский
Маньяк
Сообщения: 2759
Зарегистрирован: 18 окт 2005, 01:10

Сообщение Аман Ванкуверский »

IIS Manager -> Web site properties -> Home directory -> Configuration

Is "Cache ISAPI extensions" turned on?
In the list of extensions, check the effective settings for aspx (correct path, dlls, verbs, etc)
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

кеширование включено, для aspx стоит их родной фильтр, как и положено. IIS я перестартовал, пока глухо.
dobrik

Сообщение dobrik »

принцип работы iis 6 и .net совсем отличный от asp, php etc.

В Windows Server 2003 слушающий сокет (HTTP Listener), ранее интегрированный в IIS, реализован на уровне ядра (см. рисунок 1, модуль HTTP.SYS). Получая запросы, он не сразу передает их сервису, а сначала проверяет расширение запроса. Этим занимается модуль Web Administration Service (WAS). Если запрос предназначается ASP.NET-приложению, WAS создает рабочий процес w3wp.exe и передает в него запрос, в ином случае – в IIS. Благодаря этому обработка данных происходит значительно быстрее, нежели это происходило бы при лишнем обращении через границы процесса IIS.


тут почитай
http://www.rsdn.ru/article/dotnet/insideaspnet.xml
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

dobrik писал(а):принцип работы iis 6 и .net совсем отличный от asp, php etc.

В Windows Server 2003 слушающий сокет (HTTP Listener), ранее интегрированный в IIS, реализован на уровне ядра (см. рисунок 1, модуль HTTP.SYS). Получая запросы, он не сразу передает их сервису, а сначала проверяет расширение запроса. Этим занимается модуль Web Administration Service (WAS). Если запрос предназначается ASP.NET-приложению, WAS создает рабочий процес w3wp.exe и передает в него запрос, в ином случае – в IIS. Благодаря этому обработка данных происходит значительно быстрее, нежели это происходило бы при лишнем обращении через границы процесса IIS.


тут почитай
http://www.rsdn.ru/article/dotnet/insideaspnet.xml
Спасибо,
понятно то, что можно сделать новый фильтр под .NET однако не совсем понятно почему всетаки старые фильтры не должны работать, они зарегистрированы на уровне Web сервера и работают на самой последней стадии - пересылке страницы в браузер. Т.е. ISAPI модель абстрагирована от конкретных расширений.

Что меня смущает - не смог толком найти объяснения что да, старые фильтры не будут работать с ASP.NET страницами. Так что пока склоняюсь, что всетаки должны работать.
Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Сообщение aldep »

В статье же написано, что ASP.NET запросы не идут к IIS (который запускает ISAPI) а идут напрямую в w3wp который обрабатывает только .НЕТ.

Попробуйте
Интересный факт – можно выставить для IIS 6.0 уровень изоляции, при котором ASP.NET будет работать через IIS. Для этого нужно:

* запустить оснастку IIS Manager;
* в контекстном меню узла Web Sites выбрать пункт меню “Properties”;
* в появившемся окне свойств выбрать закладку “Service”;
* установить флаг “Run WWW service in IIS 5.0 isolation mode” во включенное состояние.

Теперь данные, находящиеся в секции <processModel> файла machine.config, не будут учитываться, и настройки нужно будет производить только через оснастку IIS Manager. Для этого в контекстном меню секции Application Pool нужно выбрать пункт меню “Properties”. В появившемся окне свойств можно увидеть настройки, в том числе и те, которые выставляются в <processModel>.
Ответить