Це моє розуміння того, як розвивалася запуск / розміщення веб-додатків, оскільки все це досить заплутано. Невеликий підсумок:
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/…