OWIN 시작 클래스 검색

이 자습서에서는 로드되는 OWIN 시작 클래스를 구성하는 방법을 보여줍니다. OWIN에 대한 자세한 내용은 Project Katana 개요를 참조하세요. 이 자습서는 Rick Anderson( @RickAndMSFT ), Praburaj Thiagarajan 및 Howard Dierking( @howard_dierking )이 작성했습니다.

사전 요구 사항

Visual Studio 2017

OWIN 시작 클래스 검색

모든 OWIN 애플리케이션에는 애플리케이션 파이프라인에 대한 구성 요소를 지정하는 시작 클래스가 있습니다. 선택한 호스팅 모델(OwinHost, IIS 및 IIS-Express)에 따라 시작 클래스를 런타임과 연결할 수 있는 다양한 방법이 있습니다. 이 자습서에 표시된 시작 클래스는 모든 호스팅 애플리케이션에서 사용할 수 있습니다. 다음 방법 중 하나를 사용하여 시작 클래스를 호스팅 런타임에 연결합니다.

  1. 명명 규칙: Katana는 어셈블리 이름 또는 전역 네임스페이스와 일치하는 네임스페이스에서 라는 Startup 클래스를 찾습니다.

  2. OwinStartup 특성: 대부분의 개발자가 시작 클래스를 지정하는 데 사용하는 방법입니다. 다음 특성은 시작 클래스를 네임스페이스의 TestStartup 클래스로 StartupDemo 설정합니다.

    [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
    

    특성은 OwinStartup 명명 규칙을 재정의합니다. 이 특성으로 식별 이름을 지정할 수도 있지만 친숙한 이름을 사용하려면 구성 파일의 appSetting 요소도 사용해야 합니다.

  3. 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");
                });
            }
        }
    }
    
  4. OWIN 시작 검색을 사용하지 않도록 설정하려면 web.config 파일에 값 "false" 이 인 를 추가 appSetting owin:AutomaticAppStartup 합니다.

    <add key="owin:AutomaticAppStartup" value="false" />
    

OWIN 시작을 사용하여 ASP.NET 웹앱 만들기

  1. 빈 Asp.Net 웹 애플리케이션을 만들고 이름을 StartupDemo로 지정합니다. - NuGet 패키지 관리자를 사용하여 설치 Microsoft.Owin.Host.SystemWeb 합니다. 도구 메뉴에서 NuGet 패키지 관리자, 패키지 관리자 콘솔을 차례로 선택합니다. 다음 명령을 입력합니다.

    Install-Package Microsoft.Owin.Host.SystemWeb
    
  2. OWIN 시작 클래스를 추가합니다. Visual Studio 2017에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 클래스 추가를 선택합니다.- 새 항목 추가 대화 상자에서 검색 필드에 OWIN 을 입력하고 이름을 Startup.cs로 변경한 다음 추가를 선택합니다.

    새 항목 추가 대화 상자의 스크린샷

    다음에 Owin Startup 클래스를 추가하려는 경우 추가 메뉴에서 사용할 수 있습니다.

    Owin 시작 클래스를 추가하는 추가 메뉴의 스크린샷

    또는 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 선택한 다음 새 항목을 선택한 다음 Owin 시작 클래스를 선택할 수 있습니다.

    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 시작 클래스를 추가할 수 있습니다. 예를 들어 개발, 테스트 및 프로덕션을 위한 시작 클래스를 만들 수 있습니다.

  1. 새 OWIN 시작 클래스를 만들고 이름을 로 지정합니다 ProductionStartup.

  2. 생성된 코드를 다음으로 바꿉니다.

    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");
                });
            }
        }
    }
    
  3. 컨트롤 F5를 눌러 앱을 실행합니다. 특성은 OwinStartup 프로덕션 시작 클래스가 실행되도록 지정합니다.

    프로덕션 시작 클래스의 스크린샷.

  4. 다른 OWIN 시작 클래스를 만들고 이름을 로 지정합니다 TestStartup.

  5. 생성된 코드를 다음으로 바꿉니다.

    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.

  6. 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>
    
  7. 컨트롤 F5를 눌러 앱을 실행합니다. 앱 설정 요소는 선례를 사용하고 테스트 구성이 실행됩니다.

    테스트 구성의 스크린샷.

  8. 클래스의 특성에서 OwinStartup식별 이름을 제거합니다TestStartup.

    [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
    
  9. web.config 파일의 OWIN 앱 시작 키를 다음으로 바꿉니다.

    <add key="owin:appStartup" value="StartupDemo.TestStartup" />
    
  10. 각 클래스의 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 사용

  1. 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 가 지정됩니다.

  2. PMC에서 Owinhost를 설치합니다.

    Install-Package OwinHost
    
  3. 애플리케이션 폴더( 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
    
  4. URL http://localhost:5000/을 사용하여 브라우저를 시작합니다.

    localhost URL을 사용하여 브라우저를 시작하는 스크린샷

    OwinHost는 위에 나열된 시작 규칙을 존중했습니다.

  5. 명령 창에서 Enter 키를 눌러 OwinHost를 종료합니다.

  6. 클래스에서 ProductionStartupProductionConfiguration의 이름을 지정하는 다음 OwinStartup 특성을 추가합니다.

    [assembly: OwinStartup("ProductionConfiguration", 
               typeof(StartupDemo.ProductionStartup))]
    
  7. 명령 프롬프트에서 다음을 입력합니다.

    ..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
    

    프로덕션 시작 클래스가 로드됩니다. 프로덕션 시작 클래스의 스크린샷

    애플리케이션에는 여러 시작 클래스가 있으며 이 예제에서는 런타임까지 로드할 시작 클래스를 연기했습니다.

  8. 다음 런타임 시작 옵션을 테스트합니다.

    ..\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"