Rilevamento della classe di avvio OWIN

Questa esercitazione illustra come configurare la classe di avvio OWIN caricata. Per altre informazioni su OWIN, vedere Panoramica di Project Katana. Questa esercitazione è stata scritta da Rick Anderson ( @RickAndMSFT ), Praburaj Thiajan e Howard Dierking ( @howard_dierking ).

Prerequisiti

Visual Studio 2017

Rilevamento della classe di avvio OWIN

Ogni applicazione OWIN ha una classe di avvio in cui si specificano i componenti per la pipeline dell'applicazione. Esistono diversi modi per connettere la classe di avvio al runtime, a seconda del modello di hosting scelto (OwinHost, IIS e IIS-Express). La classe di avvio illustrata in questa esercitazione può essere usata in ogni applicazione di hosting. La classe di avvio viene connettita al runtime di hosting usando uno degli approcci seguenti:

  1. Convenzione di denominazione: Katana cerca una classe denominata Startup nello spazio dei nomi corrispondente al nome dell'assembly o allo spazio dei nomi globale.

  2. Attributo OwinStartup: questo è l'approccio che la maggior parte degli sviluppatori dovrà adottare per specificare la classe di avvio. L'attributo seguente imposterà la classe di avvio sulla TestStartup classe nello spazio dei StartupDemo nomi .

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

    L'attributo OwinStartup esegue l'override della convenzione di denominazione. È anche possibile specificare un nome descrittivo con questo attributo, ma l'uso di un nome descrittivo richiede anche l'uso dell'elemento appSetting nel file di configurazione.

  3. L'elemento appSetting nel file di configurazione: l'elemento appSetting esegue l'override dell'attributo e della OwinStartup convenzione di denominazione. È possibile avere più classi di avvio (ognuna usando un OwinStartup attributo) e configurare la classe di avvio che verrà caricata in un file di configurazione usando markup simile al seguente:

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

    È anche possibile usare la chiave seguente, che specifica in modo esplicito la classe di avvio e l'assembly:

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

    Il codice XML seguente nel file di configurazione specifica un nome descrittivo della classe di avvio di ProductionConfiguration.

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

    Il markup precedente deve essere usato con l'attributo seguente OwinStartup che specifica un nome descrittivo e fa sì che la ProductionStartup2 classe venga eseguita.

    [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. Per disabilitare l'individuazione di avvio OWIN, aggiungere con appSetting owin:AutomaticAppStartup un valore di "false" nel file di web.config.

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

Creare un'app Web ASP.NET usando l'avvio OWIN

  1. Creare un'applicazione Web Asp.Net vuota e denominarla StartupDemo. - Installare Microsoft.Owin.Host.SystemWeb usando gestione pacchetti NuGet. Dal menu Strumenti selezionare Gestione pacchetti NuGet e quindi Console di Gestione pacchetti. Immettere il comando seguente:

    Install-Package Microsoft.Owin.Host.SystemWeb
    
  2. Aggiungere una classe di avvio OWIN. In Visual Studio 2017 fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi classe. Nella finestra di dialogo Aggiungi nuovo elemento immettere OWIN nel campo di ricerca e modificare il nome in Startup.cs e quindi scegliere Aggiungi.

    Screenshot della finestra di dialogo Aggiungi nuovo elemento.

    La volta successiva che si vuole aggiungere una classe Owin Startup, sarà disponibile dal menu Aggiungi .

    Screenshot del menu Aggiungi per aggiungere una classe di avvio Owin.

    In alternativa, è possibile fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi, quindi nuovo elemento e quindi selezionare la classe Owin Startup.

    Screenshot di Select the Owin Startup class (Selezionare la classe Owin Startup).

  • Sostituire il codice generato nel file Startup.cs con il codice seguente:

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

    L'espressione app.Use lambda viene usata per registrare il componente middleware specificato nella pipeline OWIN. In questo caso viene impostata la registrazione delle richieste in ingresso prima di rispondere alla richiesta in ingresso. Il next parametro è il delegato ( Attività Func<>) al componente successivo nella pipeline. L'espressione app.Run lambda associa la pipeline alle richieste in ingresso e fornisce il meccanismo di risposta.

    Nota

    Nel codice precedente è stato impostato come commento l'attributo OwinStartup e ci si basa sulla convenzione di esecuzione della classe denominata Startup .- Premere F5 per eseguire l'applicazione. Premere l'aggiornamento alcune volte.

    Screenshot dell'applicazione di runtime.

    Nota: il numero visualizzato nelle immagini di questa esercitazione non corrisponderà al numero visualizzato. La stringa di millisecondi viene usata per visualizzare una nuova risposta quando si aggiorna la pagina. È possibile visualizzare le informazioni di traccia nella finestra Output .

    Screenshot della finestra di output.

Aggiungere altre classi di avvio

In questa sezione verrà aggiunta un'altra classe Startup. È possibile aggiungere più classi di avvio OWIN all'applicazione. Ad esempio, è possibile creare classi di avvio per sviluppo, test e produzione.

  1. Creare una nuova classe OWIN Startup e denominarla ProductionStartup.

  2. Sostituire il codice generato con il seguente:

    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. Premere F5 per eseguire l'app. L'attributo OwinStartup specifica che viene eseguita la classe di avvio di produzione.

    Screenshot della classe di avvio della produzione.

  4. Creare un'altra classe di avvio OWIN e denominarla TestStartup.

  5. Sostituire il codice generato con il seguente:

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

    L'overload dell'attributo OwinStartup precedente specifica TestingConfiguration come nome descrittivo della classe Startup.

  6. Aprire il file web.config e aggiungere la chiave di avvio dell'app OWIN che specifica il nome descrittivo della classe Startup:

    <?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. Premere F5 per eseguire l'app. L'elemento delle impostazioni dell'app ha un precedente e viene eseguita la configurazione di test.

    Screenshot della configurazione di test.

  8. Rimuovere il nome descrittivo dall'attributo OwinStartup nella TestStartup classe .

    [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
    
  9. Sostituire la chiave di avvio dell'app OWIN nel fileweb.configcon quanto segue:

    <add key="owin:appStartup" value="StartupDemo.TestStartup" />
    
  10. Ripristinare l'attributo OwinStartup in ogni classe al codice di attributo predefinito generato da Visual Studio:

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

    Ognuna delle chiavi di avvio dell'app OWIN riportata di seguito causerà l'esecuzione della classe di produzione.

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

    L'ultima chiave di avvio specifica il metodo di configurazione di avvio. La chiave di avvio dell'app OWIN seguente consente di modificare il nome della classe di configurazione in MyConfiguration .

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

Uso di Owinhost.exe

  1. Sostituire il file Web.config con il markup seguente:

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

    L'ultima chiave prevale, quindi in questo caso TestStartup viene specificata.

  2. Installare Owinhost dal PMC:

    Install-Package OwinHost
    
  3. Passare alla cartella dell'applicazione (la cartella contenente il file Web.config ) e in un prompt dei comandi e digitare:

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

    Verrà visualizzata la finestra di comando:

    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. Avviare un browser con l'URL http://localhost:5000/.

    Screenshot dell'avvio di un browser con l'URL localhost.

    OwinHost ha rispettato le convenzioni di avvio elencate in precedenza.

  5. Nella finestra di comando premere INVIO per uscire da OwinHost.

  6. ProductionStartup Nella classe aggiungere l'attributo OwinStartup seguente che specifica un nome descrittivo di ProductionConfiguration.

    [assembly: OwinStartup("ProductionConfiguration", 
               typeof(StartupDemo.ProductionStartup))]
    
  7. Nel prompt dei comandi e digitare:

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

    La classe di avvio Production viene caricata. Screenshot della classe di avvio produzione.

    L'applicazione include più classi di avvio e in questo esempio è stata posticipata la classe di avvio da caricare fino al runtime.

  8. Testare le opzioni di avvio di runtime seguenti:

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