Связь между aspnet_isapi.dll и aspnet_wp.exe - PullRequest
2 голосов
/ 21 сентября 2010

В этой статье MSDN говорится, что:

Чтобы гарантировать оптимальную производительность, aspnet_isapi использует асинхронный по имени трубы для пересылки запросов на рабочий процесс и получать ответы. С другой стороны, рабочий процесс эксплуатирует синхронные трубы, когда это необходимо запросить информацию о среда IIS (то есть сервер переменные).

  1. Всегда ли рабочий процесс использует "синхронные" именованные каналы? (Ответ на aspnet_isapi.dll тоже будет асинхронным, верно?)
  2. Может ли рабочий процесс напрямую взаимодействовать с IIS или ему необходимо отправить синхронный запрос aspnet_isapi.dll для запроса среды IIS и т. Д.

1 Ответ

2 голосов
/ 21 сентября 2010

Позже в той же статье все становится немного яснее: p:

Логика обработки каждого запроса ASP.NET может быть обобщена в следующих шагах.

  1. Когда приходит запрос, IIS проверяет тип ресурса и вызывает расширение ISAPI ASP.NET.Если модель процесса по умолчанию включена, aspnet_isapi ставит запрос в очередь и назначает его рабочему процессу.Любые данные запроса отправляются через асинхронный ввод-вывод.Если модель процесса IIS 6 включена, запрос автоматически помещается в очередь для рабочего процесса (w3wp.exe), обрабатывающего пул приложений IIS, к которому принадлежит приложение.Рабочий процесс IIS 6 ничего не знает о ASP.NET и управляемом коде.Он ограничен обработкой расширения * .aspx и загрузкой модуля aspnet_isapi.Когда ASP.NET ISAPI работает по модели процесса IIS 6, он ведет себя по-разному и просто загружает CLR в контексте рабочего процесса w3wp.exe.
  2. После получения запроса ASP.Рабочий процесс NET уведомляет ISAPI ASP.NET, что он будет обслуживать его.Уведомление происходит через синхронный ввод-вывод.Синхронная модель используется потому, что для согласованности рабочий процесс не может начать обработку запроса, который еще не помечен как «выполняющийся» в таблице внутренних запросов ISAPI. Запрос, который обслуживается конкретным рабочим процессом, не может бытьпереназначается другому процессу, если только исходный не умирает.
  3. Запрос выполняется в контексте рабочего процесса. Могут быть обстоятельства, при которых рабочий процесс должен вызвать ISAPI обратно для выполнения запроса, то есть для перечисления серверных переменных).В этом случае рабочий процесс использует синхронные каналы, поскольку при этом сохраняется последовательность логики обработки запроса.
  4. По завершении ответ отправляется aspnet_isapi, открывающему асинхронный канал. Состояние запроса теперь изменяется на «Готово»;позже запрос будет удален из таблицы.Если рабочий процесс завершается сбоем, все запросы, которые он обрабатывал, некоторое время остаются в состоянии «выполнение».Когда aspnet_isapidetetect, что рабочий процесс мертв, он автоматически прерывает запрос и освобождает все связанные ресурсы IIS.

Итак, я думаю, что ответ на мой первый вопрос будет Нет ииз второго пункта 3 выше следует, что рабочий процесс не имеет прямого доступа к IIS, но проходит через aspnet_isapi.dll.

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