이것은 웹 응용 프로그램의 시작 / 호스팅이 진화하기가 어려워서 어떻게 발전했는지에 대한 나의 이해입니다. 작은 요약 :
1. 클래식 ASP.NET : 필수 IIS 파이프 라인의 마지막 단계에서 실행할 응용 프로그램 코드 만 작성하십시오.
2. OWIN이 포함 된 ASP.NET : .NET 웹 서버를 구성하고 응용 프로그램 코드를 작성하십시오. 더 이상 IIS에 직접 연결되지 않으므로 더 이상 사용하지 않아도됩니다.
3. ASP.NET Core : 응용 프로그램 코드를 사용하고 작성하도록 호스트와 웹 서버를 모두 구성하십시오. 전체 .NET Framework 대신 .NET Core를 대상으로하는 경우 더 이상 .NET 웹 서버를 사용하도록 요구하지 않습니다.
이제 어떻게 작동하는지와 어떤 클래스가 응용 프로그램을 시작하는 데 사용되는지 자세히 설명하겠습니다.
클래식 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
파일.
OWIN이 포함 된 ASP.NET
우선 OWIN 은 라이브러리가 아니라 .NET 웹 서버 (예 : IIS)가 웹 응용 프로그램과 상호 작용하는 방식에 대한 사양입니다. Microsoft 자체는 프로젝트 Katana (여러 가지 다른 NuGet 패키지를 통해 배포 됨)라는 OWIN 구현을 보유하고 있습니다 . 이 구현은 클래스 IAppBuilder
에서 발생 하는 인터페이스 Startup
와 Microsoft에서 제공하는 일부 OWIN 미들웨어 구성 요소 (OMC)를 제공합니다. 사용IAppBuilder
기본적으로 IIS 파이프 라인에 연결되지 않고 웹 서버에 대한 파이프 라인 (위의 포인트에서와 같이 IIS7 +의 ASP.NET 파이프 라인 만 추가)을 작성하는 플러그 앤 플레이 방식으로 미들웨어를 구성합니다 (그러나 이제는 CORS 용 미들웨어 구성 요소, 인증 용 미들웨어 구성 요소 ...). 이로 인해 응용 프로그램은 더 이상 IIS에 특별히 연결되지 않으며 다음과 같이 .NET 웹 서버에서 실행할 수 있습니다.
모든 것을 혼란스럽게 만드는 것은 Global.asax
여전히 OWIN Startup
클래스 와 함께 지원되며 둘 다 비슷한 일을 할 수 있다는 것입니다. 예를 들어, 당신은에서 CORS 구현할 수 Global.asax
된다 OWIN 미들웨어 사용 및 인증을 정말 혼란을.
경험상 OWIN을 추가해야 할 때마다 Global.asax
파일 을 모두 제거하는 것이 Startup
좋습니다.
ASP.NET 코어
ASP.NET Core는 차세대 기술이며 이제 .NET Core 또는 전체 .NET Framework를 대상으로 지정할 수 있습니다. .NET Core를 대상으로하면 .NET 표준을 지원하는 모든 호스트에서 응용 프로그램을 실행할 수 있습니다. 즉, 더 이상 .NET 웹 서버로 제한되지 않지만 Docker 컨테이너, Linux 웹 서버, IIS에서 응용 프로그램을 호스팅 할 수 있습니다 ...
ASP.NET Core 웹 응용 프로그램의 진입 점은 Program.cs
파일입니다. 여기서 호스트를 구성하고 Startup
파이프 라인을 구성 할 클래스를 다시 지정하십시오 . IAppBuilder.UseOwin
확장 방법 을 사용하여 OWIN을 사용하는 것은 선택 사항이지만 완전히 지원됩니다 .
AreaRegistration.RegisterAllAreas();
이 방법을 시작할 때와 같이 사용할 수 없으므로 오류가 발생했습니다Application_Start
. 그러나 내 응용 프로그램은 API