Архітектура 2
Постаравшись розібратися з внутрішньою інфраструктурою ASP.NET версії 2.0, можна виявити, що в ній немає жодних глобальних відмінностей від інфраструктури версії 1.х. У життєвий цикл сторінки додалися нові події, розробник отримав можливість використовувати безліч нових об'єктів та елементів керування, але загальні принципи обробки HTTP залишилися ті ж, оскільки ймовірність придумати щось більш підходяще під концепцію ASP.NET є невеликим.
У цій статті будуть розглянуті основні вдосконалення моделі компіляції ASP.NET сторінок, поділ коду та подання та взаємодія середовища виконання ASP.NET з веб-сервером IIS.
Середовище виконання ASP.NET та веб-сервер IIS
Паралельне використання із попередніми версіями ASP.NET
Оскільки в ASP.NET 2.0 присутні зміни, які можуть стати фатальними для веб-додатків, що використовують попередні версії ASP.NET, розробники та IIS передбачили можливість використовувати різні версії ASP.NET для різних додатків на одному сервері.
У консолі керування веб-сервером IIS можна вибрати версію ASP.NET, яка буде використана для кожної програми, а також встановити версію ASP.NET, яка буде використовуватися новоствореними програмами.

Мал. 1. Налаштування версії ASP.NET
Ця можливість дозволяє продовжити роботу з веб-застосунками, створеними з використанням попередніх версій ASP.NET.
Ручне встановлення ASP.NET
Для ручної установки, яка може знадобитися, якщо .NET Framework був встановлений до встановлення веб-сервера IIS або з якоїсь іншої причини, використовується утиліта командного рядка aspnet_regiis.exe, яку можна знайти в директорії%WINDIR%\Microsoft.NET\Framework\v2.0.50727\.
Таблиця 1. Ключі aspnet_regiis.exe
Взаємодія з IIS
Слід зазначити, що веб-сервери IIS 5 і IIS 6 по-різному взаємодіють з ASP.NET 2.0, оскільки цих двох версій IIS використовуються різні моделі обробки запитів.
При використанні IIS 5 середовище виконання ASP.NET представлено окремим процесом aspnet_wp.exe. Цей процес отримує управління від IIS за допомогою ASP.NET ISAPI розширення aspnet_isapi.dll. Якщо розширення запитаного ресурсу пов'язане з ASP.NET ISAPI розширенням, запит надходить на обробку робочим процесом ASP.NET, який, у свою чергу, відповідає за завантаження CLR, створення керованих об'єктів і вибудовування черги подій для ASP.NET сторінки. У цьому випадку особливо важливо відзначити, що робочий процес aspnet_wp.exe обслуговує всі веб-додатки: кожна програма виконується в окремому домені AppDomain в рамках одного робочого процесу. Робочий процес виконується під спеціальним обліковим записом ASPNET.
Процес обробки запиту при використанні IIS 5 може бути розбитий на такі кроки:
- IIS отримує запит, визначає тип ресурсу і якщо цей тип пов'язаний з ASP.NET, передає його на обробку розширенню aspnet_isapi.dll. ISAPI розширення передає запит на подальшу обробку робочого процесу ASP.NET.
- Після отримання запиту робочий процес передає повідомлення ISAPI розширенню, повідомляючи про те, що запит буде оброблений.
- Запит виконується у контексті робочого процесу ASP.NET.
- Після закінчення виконання робочий процес передає дані ISAPI розширенню, яке відповідає за звільнення ресурсів, зайнятих робочим процесом.
У разі використання IIS 6 модельобробки запитів дещо змінюється, оскільки IIS 6 використовуємо модель пула додатків – окремого робочого процесу, який обслуговує один або кілька веб-додатків. Кожен пул програм обслуговується окремим екземпляром робочого процесу w3wp.exe.
IIS 6 використовує для отримання та обробки запитів драйвер, що працює на рівні ядра операційної системи http.sys, всі запити проходять через цей драйвер, який відповідає за зіставлення запиту до відповідного пулу додатків. Робочий процес, який обслуговує пул додатків, завантажує необхідні ISAPI розширення. У випадку ASP.NET це розв'язання aspnet_isapi.dll, яке в свою чергу завантажує CLR і починає обробку запиту HTTP. Робочі процеси виконуються під обліковим записом NetworkService.
Структура ASP.NET сторінки та модель компіляції
Структура сторінки ASP.NET 2.0 не відрізняється від структури сторінок ASP.NET 1.х. Сторінка, як і раніше, розділена на дві основні частини: директиви та подання. Код програмної логіки сторінки може бути винесений в окремий файл (виділений код, Code Behind), або включений у подання сторінки як блок
Клас сторінки, що використовує функції зі зворотним викликом, повинен реалізовувати інтерфейс ICallbackEventHandler.
Сигнатури функцій, що підтримують зворотний виклик, виглядають наступним чином:
Останнім кроком до поставленої мети є зв'язування серверної та клієнтської функції.
Метод GetCallbackEventReference об'єкта ClientScriptManager приймає як параметри посилання на об'єкт сторінки, рядок, що вказує на значення, яке необхідно передавати на сервер при зворотному виклику, ім'я методу на стороні клієнта і сервера, що приймає відповідь. Детальний опис можна отримати у документації MSDN абоза допомогою інструмента Visual Studio – Object Browser.
Використовуючи цю технологію, можна створювати складні методи оновлення даних сторінки і дозволяють отримати значний виграш у продуктивності, для цього достатньо розібратися в тому, який код генерує середовище виконання ASP.NET, реалізуючи цю функціональність.
Стандартна функція doPostBack дуже проста і служить для збереження даних про подію у приховані поля форми.