Detecção de classe de inicialização OWIN

Este tutorial mostra como configurar qual classe de inicialização OWIN é carregada. Para obter mais informações sobre o OWIN, consulte uma visão geral do Project Katana. Este tutorial foi escrito por Rick Anderson ( @RickAndMSFT ), Praburaj Thiagarajan e Howard dierking ( @howard_Dierking ).

Prerequisites

Visual Studio 2017

Detecção de classe de inicialização OWIN

Cada aplicativo OWIN tem uma classe de inicialização na qual você especifica componentes para o pipeline de aplicativo. Há diferentes maneiras pelas quais você pode conectar sua classe de inicialização com o tempo de execução, dependendo do modelo de hospedagem que você escolher (OwinHost, IIS e IIS-Express). A classe de inicialização mostrada neste tutorial pode ser usada em todos os aplicativos de hospedagem. Você conecta a classe de inicialização ao tempo de execução de hospedagem usando uma das abordagens a seguir:

  1. Convenção de nomenclatura: Katana procura uma classe chamada Startup no namespace que corresponde ao nome do assembly ou ao namespace global.

  2. Atributo OwinStartup: essa é a abordagem que a maioria dos desenvolvedores demorará para especificar a classe de inicialização. O atributo a seguir definirá a classe de inicialização para a classe TestStartup no namespace StartupDemo.

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

    O atributo OwinStartup substitui a Convenção de nomenclatura. Você também pode especificar um nome amigável com esse atributo, no entanto, usar um nome amigável requer que você também use o elemento appSetting no arquivo de configuração.

  3. O elemento appSetting no arquivo de configuração: o elemento appSetting substitui o atributo OwinStartup e a Convenção de nomenclatura. Você pode ter várias classes de inicialização (cada uma usando um atributo OwinStartup) e configurar qual classe de inicialização será carregada em um arquivo de configuração usando marcação semelhante à seguinte:

    <appSettings>  
      <add key="owin:appStartup" value="StartupDemo.ProductionStartup" />
    </appSettings>
    

    A chave a seguir, que especifica explicitamente a classe de inicialização e o assembly também pode ser usada:

    <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
    

    O XML a seguir no arquivo de configuração especifica um nome de classe de inicialização amigável de ProductionConfiguration.

    <appSettings>  
      <add key="owin:appStartup" value="ProductionConfiguration" />       
    </appSettings>
    

    A marcação acima deve ser usada com o atributo OwinStartup a seguir, que especifica um nome amigável e faz com que a classe ProductionStartup2 seja executada.

    [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. Para desabilitar a descoberta de inicialização do OWIN, adicione o appSetting owin:AutomaticAppStartup com um valor de "false" no arquivo Web. config.

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

Criar um aplicativo Web ASP.NET usando a inicialização do OWIN

  1. Crie um aplicativo Web Asp.Net vazio e nomeie-o StartupDemo. -Instale Microsoft.Owin.Host.SystemWeb usando o Gerenciador de pacotes NuGet. No menu ferramentas , selecione Gerenciador de pacotes NuGete, em seguida, console do Gerenciador de pacotes. Insira o seguinte comando:

    Install-Package Microsoft.Owin.Host.SystemWeb
    
  2. Adicione uma classe de inicialização OWIN. No Visual Studio 2017, clique com o botão direito do mouse no projeto e selecione Adicionar classe.-na caixa de diálogo Adicionar novo item , digite OWIN no campo de pesquisa e altere o nome para startup.cs e, em seguida, selecione Adicionar.

    Na próxima vez que você quiser adicionar uma classe de inicialização Owin, ela estará disponível no menu Adicionar .

    Como alternativa, você pode clicar com o botão direito do mouse no projeto e selecionar Adicionar, selecionar novo iteme, em seguida, selecionar a classe de inicialização Owin.

  • Substitua o código gerado no arquivo Startup.cs pelo seguinte:

    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();
          }
       }
    }
    

    A app.Use expressão lambda é usada para registrar o componente de middleware especificado no pipeline OWIN. Nesse caso, estamos Configurando o log de solicitações de entrada antes de responder à solicitação de entrada. O parâmetro next é o delegado ( Func < Task >) para o próximo componente no pipeline. O app.Run expressão lambda conecta o pipeline a solicitações de entrada e fornece o mecanismo de resposta.

    Note

    No código acima, comentamos o atributo OwinStartup e estamos contando com a Convenção de executar a classe chamada Startup.-Pressione F5 para executar o aplicativo. Pressione atualizar algumas vezes.

    Observação: o número mostrado nas imagens neste tutorial não corresponderá ao número que você vê. A cadeia de caracteres de milissegundos é usada para mostrar uma nova resposta quando você atualiza a página. Você pode ver as informações de rastreamento na janela saída .

Adicionar mais classes de inicialização

Nesta seção, vamos adicionar outra classe Startup. Você pode adicionar várias classes de inicialização OWIN ao seu aplicativo. Por exemplo, talvez você queira criar classes de inicialização para desenvolvimento, teste e produção.

  1. Crie uma nova classe de inicialização OWIN e nomeie-a ProductionStartup.

  2. Substitua o código gerado pelo seguinte:

    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. Pressione Control F5 para executar o aplicativo. O atributo OwinStartup especifica que a classe de inicialização de produção é executada.

  4. Crie outra classe de inicialização OWIN e nomeie-a TestStartup.

  5. Substitua o código gerado pelo seguinte:

    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");
                });
            }
        }
    }
    

    A sobrecarga de atributo OwinStartup acima Especifica TestingConfiguration como o nome amigável da classe de inicialização.

  6. Abra o arquivo Web. config e adicione a chave de inicialização do aplicativo OWIN que especifica o nome amigável da classe de inicialização:

    <?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. Pressione Control F5 para executar o aplicativo. O elemento de configurações do aplicativo usa o precedente e a configuração de teste é executada.

  8. Remova o nome amigável do atributo OwinStartup na classe TestStartup.

    [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
    
  9. Substitua a chave de inicialização do aplicativo OWIN no arquivo Web. config pelo seguinte:

    <add key="owin:appStartup" value="StartupDemo.TestStartup" />
    
  10. Reverta o atributo OwinStartup em cada classe para o código de atributo padrão gerado pelo Visual Studio:

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

    Cada uma das chaves de inicialização do aplicativo OWIN abaixo fará com que a classe de produção seja executada.

    <add key="owin:appStartup" value="StartupDemo.ProductionStartup" />
    <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
    <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
    

    A última chave de inicialização especifica o método de configuração de inicialização. A chave de inicialização do aplicativo OWIN a seguir permite que você altere o nome da classe de configuração para MyConfiguration.

    <add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
    

Usando Owinhost. exe

  1. Substitua o arquivo Web. config pela seguinte marcação:

    <?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>
    

    A última chave vence, portanto, nesse caso TestStartup é especificado.

  2. Instale o Owinhost do PMC:

    Install-Package OwinHost
    
  3. Navegue até a pasta do aplicativo (a pasta que contém o arquivo Web. config ) e, em um prompt de comando, digite:

    ..\packages\Owinhost<Version>\tools\Owinhost.exe
    

    A janela de comando mostrará:

    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. Inicie um navegador com a URL http://localhost:5000/.

    OwinHost homenageau as convenções de inicialização listadas acima.

  5. Na janela de comando, pressione ENTER para sair de OwinHost.

  6. Na classe ProductionStartup, adicione o seguinte atributo OwinStartup que especifica um nome amigável de ProductionConfiguration.

    [assembly: OwinStartup("ProductionConfiguration", 
               typeof(StartupDemo.ProductionStartup))]
    
  7. No prompt de comando e digite:

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

    A classe de inicialização de produção é carregada.

    Nosso aplicativo tem várias classes de inicialização e, neste exemplo, adiamos qual classe de inicialização carregar até o tempo de execução.

  8. Teste as seguintes opções de inicialização de tempo de execução:

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