OWIN 시작 클래스 검색
이 자습서에서는 로드되는 OWIN 시작 클래스를 구성하는 방법을 보여줍니다. OWIN에 대한 자세한 내용은 Project Katana 개요를 참조하세요. 이 자습서는 Rick Anderson( @RickAndMSFT ), Praburaj Thiagarajan 및 Howard Dierking( @howard_dierking )이 작성했습니다.
사전 요구 사항
OWIN 시작 클래스 검색
모든 OWIN 애플리케이션에는 애플리케이션 파이프라인에 대한 구성 요소를 지정하는 시작 클래스가 있습니다. 선택한 호스팅 모델(OwinHost, IIS 및 IIS-Express)에 따라 시작 클래스를 런타임과 연결할 수 있는 다양한 방법이 있습니다. 이 자습서에 표시된 시작 클래스는 모든 호스팅 애플리케이션에서 사용할 수 있습니다. 다음 방법 중 하나를 사용하여 시작 클래스를 호스팅 런타임에 연결합니다.
명명 규칙: Katana는 어셈블리 이름 또는 전역 네임스페이스와 일치하는 네임스페이스에서 라는
Startup
클래스를 찾습니다.OwinStartup 특성: 대부분의 개발자가 시작 클래스를 지정하는 데 사용하는 방법입니다. 다음 특성은 시작 클래스를 네임스페이스의
TestStartup
클래스로StartupDemo
설정합니다.[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
특성은
OwinStartup
명명 규칙을 재정의합니다. 이 특성으로 식별 이름을 지정할 수도 있지만 친숙한 이름을 사용하려면 구성 파일의appSetting
요소도 사용해야 합니다.Configuration 파일의 appSetting 요소:
appSetting
요소는 특성 및 명명 규칙을 재정의OwinStartup
합니다. 여러 시작 클래스(각각 특성을 사용OwinStartup
)를 사용하고 다음과 유사한 태그를 사용하여 구성 파일에 로드할 시작 클래스를 구성할 수 있습니다.<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
시작 클래스 및 어셈블리를 명시적으로 지정하는 다음 키도 사용할 수 있습니다.
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
구성 파일의 다음 XML은 의 친숙한 시작 클래스 이름을
ProductionConfiguration
지정합니다.<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
위의 태그는 식별 이름을 지정하고 클래스가 실행되도록
ProductionStartup2
하는 다음OwinStartup
특성과 함께 사용해야 합니다.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } public class ProductionStartup2 { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " 2nd Production OWIN App"); }); } } }
OWIN 시작 검색을 사용하지 않도록 설정하려면 web.config 파일에 값
"false"
이 인 를 추가appSetting owin:AutomaticAppStartup
합니다.<add key="owin:AutomaticAppStartup" value="false" />
OWIN 시작을 사용하여 ASP.NET 웹앱 만들기
빈 Asp.Net 웹 애플리케이션을 만들고 이름을 StartupDemo로 지정합니다. - NuGet 패키지 관리자를 사용하여 설치
Microsoft.Owin.Host.SystemWeb
합니다. 도구 메뉴에서 NuGet 패키지 관리자, 패키지 관리자 콘솔을 차례로 선택합니다. 다음 명령을 입력합니다.Install-Package Microsoft.Owin.Host.SystemWeb
OWIN 시작 클래스를 추가합니다. Visual Studio 2017에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 클래스 추가를 선택합니다.- 새 항목 추가 대화 상자에서 검색 필드에 OWIN 을 입력하고 이름을 Startup.cs로 변경한 다음 추가를 선택합니다.
다음에 Owin Startup 클래스를 추가하려는 경우 추가 메뉴에서 사용할 수 있습니다.
또는 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 항목을 선택한 다음 Owin 시작 클래스를 선택할 수 있습니다.
Startup.cs 파일에서 생성된 코드를 다음으로 바꿉니다.
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo { public class Startup { public void Configuration(IAppBuilder app) { app.Use((context, next) => { TextWriter output = context.Get<TextWriter>("host.TraceOutput"); return next().ContinueWith(result => { output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}", context.Request.Scheme, context.Request.Method, context.Request.Path, getTime()); }); }); app.Run(async context => { await context.Response.WriteAsync(getTime() + " My First OWIN App"); }); } string getTime() { return DateTime.Now.Millisecond.ToString(); } } }
app.Use
람다 식은 지정된 미들웨어 구성 요소를 OWIN 파이프라인에 등록하는 데 사용됩니다. 이 경우 들어오는 요청에 응답하기 전에 들어오는 요청의 로깅을 설정합니다. 매개 변수는next
파이프라인의 다음 구성 요소에 대한 대리자( Func<Task> )입니다. 람다 식은app.Run
파이프라인을 들어오는 요청에 연결하고 응답 메커니즘을 제공합니다.참고
위의 코드에서 특성을 주석
OwinStartup
으로 처리했으며 .- F5 키를 눌러 애플리케이션을 실행하는 클래스Startup
를 실행하는 규칙에 의존합니다. 새로 고침을 몇 번 누릅니다.참고: 이 자습서의 이미지에 표시된 숫자는 표시되는 숫자와 일치하지 않습니다. 밀리초 문자열은 페이지를 새로 고칠 때 새 응답을 표시하는 데 사용됩니다. 출력 창에서 추적 정보를 볼 수 있습니다.
시작 클래스 추가
이 섹션에서는 다른 시작 클래스를 추가합니다. 애플리케이션에 여러 OWIN 시작 클래스를 추가할 수 있습니다. 예를 들어 개발, 테스트 및 프로덕션을 위한 시작 클래스를 만들 수 있습니다.
새 OWIN 시작 클래스를 만들고 이름을 로 지정합니다
ProductionStartup
.생성된 코드를 다음으로 바꿉니다.
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } }
컨트롤 F5를 눌러 앱을 실행합니다. 특성은
OwinStartup
프로덕션 시작 클래스가 실행되도록 지정합니다.다른 OWIN 시작 클래스를 만들고 이름을 로 지정합니다
TestStartup
.생성된 코드를 다음으로 바꿉니다.
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))] namespace StartupDemo { public class TestStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Test OWIN App"); }); } } }
OwinStartup
위의 특성 오버로드는 Startup 클래스의 식별 이름으로 지정합니다TestingConfiguration
.web.config 파일을 열고 Startup 클래스의 이름을 지정하는 OWIN 앱 시작 키를 추가합니다.
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="TestingConfiguration" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
컨트롤 F5를 눌러 앱을 실행합니다. 앱 설정 요소는 선례를 사용하고 테스트 구성이 실행됩니다.
클래스의 특성에서
OwinStartup
식별 이름을 제거합니다TestStartup
.[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
web.config 파일의 OWIN 앱 시작 키를 다음으로 바꿉니다.
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
각 클래스의
OwinStartup
특성을 Visual Studio에서 생성된 기본 특성 코드로 되돌려 옵니다.[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
아래의 각 OWIN 앱 시작 키로 인해 프로덕션 클래스가 실행됩니다.
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
마지막 시작 키는 시작 구성 메서드를 지정합니다. 다음 OWIN 앱 시작 키를 사용하면 구성 클래스
MyConfiguration
의 이름을 로 변경할 수 있습니다.<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
Owinhost.exe 사용
Web.config 파일을 다음 태그로 바꿉 있습니다.
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="StartupDemo.Startup" /> <add key="owin:appStartup" value="StartupDemo.TestStartup" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
마지막 키가 우선하므로 이 경우
TestStartup
가 지정됩니다.PMC에서 Owinhost를 설치합니다.
Install-Package OwinHost
애플리케이션 폴더( Web.config 파일이 포함된 폴더)로 이동하고 명령 프롬프트에서 다음을 입력합니다.
..\packages\Owinhost<Version>\tools\Owinhost.exe
명령 창에 다음이 표시됩니다.
C:\StartupDemo\StartupDemo>..\packages\OwinHost.2.0.0\tools\Owin Host.exe Starting with the default port: 5000 (http://localhost:5000/) Started successfully Press Enter to exit
URL
http://localhost:5000/
을 사용하여 브라우저를 시작합니다.OwinHost는 위에 나열된 시작 규칙을 존중했습니다.
명령 창에서 Enter 키를 눌러 OwinHost를 종료합니다.
클래스에서
ProductionStartup
ProductionConfiguration의 이름을 지정하는 다음 OwinStartup 특성을 추가합니다.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
명령 프롬프트에서 다음을 입력합니다.
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
프로덕션 시작 클래스가 로드됩니다.
애플리케이션에는 여러 시작 클래스가 있으며 이 예제에서는 런타임까지 로드할 시작 클래스를 연기했습니다.
다음 런타임 시작 옵션을 테스트합니다.
..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup,StartupDemo" ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup.Configuration ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup.Configuration,StartupDemo"