модель додатки

Веб-сервер не має поняття про окремо існуючих додатках - він просто передає запит робочому процесу ASP.NET. Однак робочий процес ASP.NET ретельно розділяє виконання коду в різні домени додатків на основі віртуального каталогу. Веб-сторінки, які знаходяться в одному і тому ж віртуальному каталозі (або в одному з його підкаталогів), виконуються в одному і тому ж домені додатку. Веб-сторінки з різних віртуальних каталогів виконуються в різних доменах додатків.

домен додатки

Домен програми - це встановлювана середовищем CLR межа, яка гарантує, що один додаток не зможе впливати на іншу програму (або бачити зберігаються в його пам'яті дані). Наступні характеристики є прямим наслідком моделі домену програми:

Всі веб-сторінки в одному веб-додатку спільно використовують одні і ті ж ресурси, що знаходяться в пам'яті - глобальні дані програми, дані сеансів окремих користувачів, а також кешированниє дані. Ця інформація не доступна безпосередньо, іншим програмам ASP.NET або ASP.

Всі веб-сторінки в одному веб-додатку спільно використовують одні і ті ж основні конфігураційні налаштування. Однак можна налаштовувати деякі параметри конфігурації в окремих підкаталогах одного і того ж віртуального каталогу. Наприклад, можна встановити тільки один механізм аутентифікації для веб-додатки, незалежно від того, яка кількість підкаталогів в ньому є.

Всі веб-додатки генерують глобальні події додатків на різних стадіях (коли домен додатки створюється в перший раз, коли він знищується, і т.д.). За допомогою коду у файлі global.asax, розташованому в віртуальному каталозі додатки, можна приєднувати обробники подій, які будуть реагувати на ці глобальні події додатків.

Іншими словами, віртуальний каталог є базовою груповий структурою, яка визначає межі програми ASP.NET. Допустиме додаток ASP.NET цілком може містити єдину веб-форму (файл .aspx). Однак в принципі кожен додаток ASP.NET може включати всі перераховані нижче компоненти:

Ці компоненти є основними в будь-якому додатку ASP.NET.

Майстер-сторінки (файли .master)

Ці компоненти являють собою шаблони, які дозволяють будувати безліч веб-форм з однаковою структурою.

Ці компоненти дозволяють спільно використовувати корисні функції додатками, які розташовані на інших комп'ютерах і платформах.

Файли відокремленого коду

Залежно від моделі коду, також можуть бути присутні і окремі файли вихідного коду. Якщо ці файли містять код на мові C #, то вони мають розширення .cs.

Конфігураційний файл (web.config)

У цьому файлі міститься безліч параметрів рівня додатки, які відповідають за налаштування всіх аспектів, починаючи з безпеки і закінчуючи налагодженням і управлінням станом.

У цьому файлі містяться обробники подій, що реагують на глобальні події додатки (такі як його перший запуск).

До їх числа відносяться скомпільовані збірки, в яких містяться або окремі компоненти, розроблені вами, або компоненти сторонніх постачальників, які мають корисну функціональність. Ці компоненти дозволяють відокремлювати бізнес-логіку від логіки доступу до даних і створювати спеціальні елементи управління.

Природно, віртуальний каталог може містити велику кількість додаткових ресурсів, які будуть використовуватися веб-додатками ASP.NET, включаючи таблиці стилів, зображення, XML-файли і т.д. До того ж ви можете розширювати модель ASP.NET, розробляючи спеціалізовані компоненти - обробники HTTP і модулі HTTP, які можуть вбудовуватися в додаток і брати участь в обробці веб-запитів ASP.NET.

В одному і тому ж віртуальному каталозі цілком можуть зберігатися файли різних типів, що належать різним обробникам. Як простий приклад можна навести ситуацію із змішуванням файлів .aspx і .asp. У більш складному прикладі середу ASP.NET 4 може бути налаштована на обробку запитів до файлів .aspx, a ASP.NET 3.5 - на обробку запитів до файлів з якимось іншим розширенням.

Час життя додатки

Для створення доменів додатків ASP.NET використовує технологію відкладеної, або "ледачою" ініціалізації (lazy initialization). Це означає, що домен для веб-додатки створюється при першому отриманні запиту на сторінку в цьому додатку.

Робота домена додатку може завершуватися з різних причин, в тому числі і через завершення роботи самого веб-сервера. Але, як правило, додатки самостійно перезапускати в нових доменах додатків у відповідь на помилки або зміни в конфігурації.

У разі зміни додаткам середовище ASP.NET автоматично оновлює домени додатків. Одним із прикладів може бути модифікація файлу web.config. Інший приклад - заміна існуючого файлу веб-сторінки або DLL-файлу збірки. В обох цих випадках ASP.NET запускає новий домен додатки для обробки всіх майбутніх запитів і зберігає існуючий домен програми в робочому стані до тих пір, поки не завершиться обробка всіх незакінчених запитів (включаючи ті, що знаходяться в черзі).

Порівняння доменів додатків і пулів додатків

В IIS поведінку веб-додатків конфигурируется за допомогою пулів додатків. Параметри пулу додатків визначають версію .NET, яку має отримати додаток, скільки воно може залишатися в бездіяльності, перш ніж завершиться, чи має воно перезапускатися автоматично при виникненні певних помилок, і т.д.

Концепція пулу додатків подібна поняттю доменів додатків, але є трохи більш широкою. Відмінність полягає в наступному. Кожен пул додатків IIS може конфігурувати одне або більше веб-додатків. Під час виконання кожне веб-додаток зазвичай складається з одного домена додатку. Формально пули додатків є конфігураційним засобом IIS, a домени додатків - частиною інфраструктури .NET.

оновлення додатків

Однією з найбільш примітних особливостей моделі виконання ASP.NET є те, що вона дозволяє оновлювати веб-додаток, що не перезапуску веб-сервер і не турбуючись про те, що це може завдати шкоди існуючим клієнтам. Це означає, що файли у віртуальному каталозі можуть замінюватися, додаватися і віддалятися в будь-який час. ASP.NET потім виконує точно такий же перехід на новий домен додатки, як і в разі зміни конфігураційного файлу web.config.

Можливість оновлювати будь-яку частину програми в будь-який час, не перериваючи виконання існуючих запитів, є потужним засобом. Однак важливо розуміти, що саме в архітектурі ASP.NET робить це доступним. Багато розробники помилково припускають, що плавно переходити на новий домен додатки ASP.NET дозволяє середу CLR. Але насправді CLR-середовище завжди блокує файли збірок, коли виконує їх.

Другий примітною особливістю є здатність ASP.NET виявляти зміни у вихідних файлах. Тут все досить зрозуміло - ASP.NET просто покладається на можливість операційної системи Windows відстежувати каталоги і файли і відправляти негайні повідомлення про зміни. ASP.NET підтримує активний список всіх збірок, завантажених в домен конкретного додатка, і використовує код моніторингу для спостереження за змінами і виконання відповідних дій.

ASP.NET може використовувати файли, що зберігаються в глобальному кеші збірок (Global Assembly Cache - GAC), який являє собою доступне в межах комп'ютера сховище і містить всі основні інгредієнти, такі як складання для бібліотеки класів .NET Framework. В GAC можна поміщати і власні збірки, але це зазвичай ускладнює розгортання і управління веб-додатками.

Структура каталогів додатки

Кожне веб-додаток повинен мати добре продуману структуру каталогів. Яку б структуру рейтингів не проектував розробник, ASP.NET пропонує кілька каталогів спеціального призначення:

Спеціальні каталоги ASP.NET

У цьому каталозі містяться всі заздалегідь скомпільовані збірки .NET (зазвичай мають вигляд DLL-файлів), які використовує дане веб-додаток ASP.NET. У число цих збірок можуть входити як попередньо скомпільовані класи веб-сторінок, так і інші збірки, на які посилаються ці класи.

Якщо для розробки веб-додатки в Visual Studio використовується модель з проектом, а не більше поширена модель веб-сайту, в каталозі Bin буде також міститися збірка з скомпільований кодом всього веб-додатки. Ця збірка має таке ж, як у додатки ім'я, наприклад WebApplication1.dll.

У цьому каталозі містяться файли вихідного коду, які динамічно компілюються для використання в цьому додатку. Ці файли коду зазвичай підставляють собою окремі компоненти, такі як компонент для входу в систему або бібліотека доступу до даних. Динамічно компільований код ніколи не з'являється в каталозі Bin, оскільки ASP.NET поміщає його в тимчасові каталоги, призначені спеціально для цих цілей.

В цьому каталозі зберігаються глобальні ресурси, які доступні для кожної сторінки в даному веб-додатку.

Цей каталог служить тієї ж мети, що і каталог Арр_GlobalResources, але тільки що містяться в ньому ресурси доступні лише тих сторінок в додатку, для яких вони спеціально призначені.

В цьому каталозі зберігаються посилання на веб-служби, які використовує дане веб-додаток, включаючи файли WSDL і документи виявлення.

Цей каталог призначений для зберігання даних, включаючи файли бази даних SQL Server Express і файли XML. Зрозуміло, файли даних можна зберігати в інших каталогах.

У цьому каталозі містяться визначення браузерів, що зберігаються в XML-файлах. Ці XML-файли визначають можливості клієнтських браузерів по виконанню різних дій, пов'язаних з візуалізацією. Хоча ASP.NET робить це глобально (по всьому комп'ютеру), каталог App_Browsers дозволяє конфігурувати дану поведінку для окремих веб-додатків.

В цьому каталозі зберігаються теми, які можуть використовуватися в даному веб-додатку.