Це моє розуміння того, як розвивалася запуск / розміщення веб-додатків, оскільки все це досить заплутано. Невеликий підсумок:
1. Класичний ASP.NET: Напишіть лише код програми для запуску на останньому кроці обов'язкового трубопроводу IIS
2. ASP.NET за допомогою OWIN: Настройте веб-сервер .NET і напишіть код програми. Більше не пов'язане безпосередньо з IIS, тому ви більше не змушені ним користуватися.
3. ASP.NET Core: Налаштуйте як хост, так і веб-сервер для використання та запису коду програми. Більше не потрібно використовувати веб-сервер .NET, якщо ви орієнтуєтесь на .NET Core замість повної .NET Framework.
Зараз я трохи детальніше розповім, як це працює та які класи використовуються для запуску програми:
Класичний ASP.NET
Класичні програми ASP.NET мають Global.asaxфайл в якості точки входу. Ці програми можна запускати лише в IIS, і ваш код виконується в кінці трубопроводу IIS (тому IIS відповідає за CORS, автентифікацію ... до того, як ваш код навіть запуститься). З IIS 7 ви можете запускати свою програму в інтегрованому режимі, який інтегрує час виконання ASP.NET в IIS. Це дозволяє вашому коду налаштувати функціональні можливості, які раніше були неможливі (або лише в самому IIS), такі як перезапис URL-адреси у Application_Startвипадку вашого Global.asaxфайлу або використання нового <system.webserver>розділу у вашому web.configфайлі.
ASP.NET з OWIN
Перш за все, OWIN - це не бібліотека, а конкретизація взаємодії .NET-серверів (наприклад, IIS) з веб-додатками. Самі Microsoft мають реалізацію проекту OWIN під назвою Katana (поширюється через декілька різних пакетів NuGet). Ця реалізація надає IAppBuilderінтерфейс, з яким ви стикаєтесь у Startupкласі, та деякі компоненти проміжного програмного забезпечення OWIN (OMC), що надаються Microsoft. ВикористанняIAppBuilderви в основному створюєте проміжне програмне забезпечення підключення до режиму «підключення і відтворення», щоб створити конвеєр для веб-сервера (окрім лише трубопроводу ASP.NET в IIS7 +, як у пункті вище), замість того, щоб прив’язуватися до трубопроводу IIS (але тепер ви використовуєте компонент середнього програмного забезпечення для CORS, компонент середнього програмного забезпечення для аутентифікації ...). Через це ваша програма більше не приєднана до IIS, і ви можете запустити її на будь-якому веб-сервері .NET, наприклад:
- Пакет OwinHost можна використовувати для самостійного розміщення вашої програми за допомогою веб-сервера Katana.
- Пакет Microsoft.Owin.Host.SystemWeb використовується для розміщення вашої програми OWIN в IIS7 + в інтегрованому режимі, підписавши внутрішнє програмне забезпечення на правильні події протягом життя.
Те, що робить все настільки заплутаним, це те, що Global.asaxвін все ще підтримується разом із Startupкласом OWIN , хоча вони можуть робити подібні речі. Наприклад , ви могли б реалізувати CORS в Global.asaxі аутентифікації з використанням Owin проміжного рівня, який стає дуже заплутаним.
Моє правило - видалити Global.asaxфайл взагалі на користь використання, Startupколи мені потрібно додати OWIN.
ASP.NET Core
Наступна еволюція ASP.NET Core - тепер ви можете орієнтуватися на .NET Core або повний .NET Framework. Коли ви орієнтуєтесь на .NET Core, ви можете запустити свою програму на будь-якому хості, який підтримує .NET Standard. Це означає, що ви більше не обмежені веб-сервером .NET (як у попередньому пункті), але можете розмістити вашу програму в контейнерах Docker, веб-сервері linux, IIS ...
Точкою входу для веб-програми ASP.NET Core є Program.csфайл. Там ви налаштовуєте свого хоста і знову вказуєте свій Startupклас, де ви налаштовуєте конвеєр. Використання OWIN (за допомогою IAppBuilder.UseOwinметоду розширення) необов'язково, але повністю підтримується .
AreaRegistration.RegisterAllAreas();Для мене викликана помилка, оскільки цей метод заборонено використовувати під час запуску, як це, лише вApplication_Start. Однак моя програма - це API, і цей спосіб, мабуть, корисний лише для програм MVC: stackoverflow.com/questions/18404637/…