Condividi tramite


Ospitare OWIN in un ruolo di lavoro di Azure

Questa esercitazione illustra come ospitare automaticamente OWIN in un ruolo di lavoro di Microsoft Azure.

Open Web Interface for .NET (OWIN) definisce un'astrazione tra i server Web .NET e le applicazioni Web. OWIN separa l'applicazione Web dal server, che rende OWIN ideale per l'auto-hosting di un'applicazione Web nel proprio processo, all'esterno di IIS, ad esempio all'interno di un ruolo di lavoro di Azure.

In questa esercitazione si apprenderà come ospitare automaticamente un'applicazione OWIN all'interno di un ruolo di lavoro di Microsoft Azure. Per altre informazioni sui ruoli di lavoro, vedere Modelli di esecuzione di Azure.

Versioni software usate nell'esercitazione

Creare un progetto di Microsoft Azure

Avviare Visual Studio con privilegi di amministratore. I privilegi di amministratore sono necessari per eseguire il debug dell'applicazione in locale usando l'emulatore di calcolo di Azure.

Nel menu File fare clic su Nuovo, quindi su Progetto. In Modelli installati, in Visual C#, fare clic su Cloud e quindi su Servizio cloud di Windows Azure. Assegnare un nome al progetto "AzureApp" e fare clic su OK.

Immagine della struttura di file di esempio

Nella finestra di dialogo Nuovo servizio cloud di Windows Azure fare doppio clic su Ruolo di lavoro. Lasciare il nome predefinito ("WorkerRole1"). Questo passaggio aggiunge un ruolo di lavoro alla soluzione. Fare clic su OK.

Finestra di dialogo Servizi cloud di Azure

La soluzione di Visual Studio creata contiene due progetti:

  • "AzureApp" definisce i ruoli e la configurazione per l'applicazione Azure.
  • "WorkerRole1" contiene il codice per il ruolo di lavoro.

In generale, un'applicazione di Azure può contenere più ruoli, anche se questa esercitazione usa un singolo ruolo.

Esplora soluzioni, finestra di dialogo

Aggiungere i pacchetti di Self-Host OWIN

Dal menu Strumenti fare clic su Gestione pacchetti NuGet e quindi su Console di Gestione pacchetti.

Nella finestra Console di gestione pacchetti immettere il comando seguente:

Install-Package Microsoft.Owin.SelfHost

Aggiungere un endpoint HTTP

In Esplora soluzioni espandere il progetto AzureApp. Espandere il nodo Ruoli, fare clic con il pulsante destro del mouse su WorkerRole1 e scegliere Proprietà.

Aggiunta di un'illustrazione dell'endpoint HTTP

Scegliere Endpoint, quindi fare clic su Aggiungi endpoint.

Nell'elenco a discesa Protocollo selezionare "http". In Porta pubblica e porta privata digitare 80. Questi numeri di porta possono essere diversi. La porta pubblica è ciò che i client usano quando inviano una richiesta al ruolo.

Immagine di esempio di selezione del protocollo

Creare la classe di avvio OWIN

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto WorkerRole1 e selezionare Aggiungi / classe per aggiungere una nuova classe. Denominare la classe Startup.

Sostituire tutto il codice boilerplate con quanto segue:

using Owin;

namespace WorkerRole1
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseWelcomePage("/");
        }
    }
}

Il UseWelcomePage metodo di estensione aggiunge una semplice pagina HTML all'applicazione per verificare che il sito funzioni.

Avviare l'host OWIN

Aprire il file WorkerRole.cs. Questa classe definisce il codice eseguito quando il ruolo di lavoro viene avviato e arrestato.

Aggiungere l'istruzione using seguente:

using Microsoft.Owin.Hosting;

Aggiungere un membro IDisposable alla WorkerRole classe:

public class WorkerRole : RoleEntryPoint
{
    private IDisposable _app = null;

    // ....
}

OnStart Nel metodo aggiungere il codice seguente per avviare l'host:

public override bool OnStart()
{
    ServicePointManager.DefaultConnectionLimit = 12;

    // New code:
    var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"];
    string baseUri = String.Format("{0}://{1}", 
        endpoint.Protocol, endpoint.IPEndpoint);

    Trace.TraceInformation(String.Format("Starting OWIN at {0}", baseUri), 
        "Information");

    _app = WebApp.Start<Startup>(new StartOptions(url: baseUri));
    return base.OnStart();
}

Il metodo WebApp.Start avvia l'host OWIN. Il nome della classe è un parametro di Startup tipo per il metodo. Per convenzione, l'host chiamerà il Configure metodo di questa classe.

Eseguire l'override OnStop di per eliminare l'istanza di _app :

public override void OnStop()
{
    if (_app != null)
    {
        _app.Dispose();
    }
    base.OnStop();
}

Ecco il codice completo per WorkerRole.cs:

using Microsoft.Owin.Hosting;
using Microsoft.WindowsAzure.ServiceRuntime;
using System;
using System.Diagnostics;
using System.Net;
using System.Threading;

namespace WorkerRole1
{
    public class WorkerRole : RoleEntryPoint
    {
        private IDisposable _app = null;

        public override void Run()
        {
            Trace.TraceInformation("WorkerRole entry point called", "Information");

            while (true)
            {
                Thread.Sleep(10000);
                Trace.TraceInformation("Working", "Information");
            }
        }

        public override bool OnStart()
        {
            ServicePointManager.DefaultConnectionLimit = 12;

            var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"];
            string baseUri = String.Format("{0}://{1}", 
                endpoint.Protocol, endpoint.IPEndpoint);

            Trace.TraceInformation(String.Format("Starting OWIN at {0}", baseUri), 
                "Information");

            _app = WebApp.Start<Startup>(new StartOptions(url: baseUri));
           return base.OnStart();
        }

        public override void OnStop()
        {
            if (_app != null)
            {
                _app.Dispose();
            }
            base.OnStop();
        }
    }
}

Compilare la soluzione e premere F5 per eseguire l'applicazione in locale nell'emulatore di calcolo di Azure. A seconda delle impostazioni del firewall, potrebbe essere necessario consentire l'emulatore tramite il firewall.

L'emulatore di calcolo assegna un indirizzo IP locale all'endpoint. È possibile trovare l'indirizzo IP visualizzando l'interfaccia utente dell'emulatore di calcolo. Fare clic con il pulsante destro del mouse sull'icona dell'emulatore nell'area di notifica della barra delle applicazioni e selezionare Mostra interfaccia utente dell'emulatore di calcolo.

Illustrazione dell'emulatore di calcolo

Trovare l'indirizzo IP in Distribuzioni del servizio, distribuzione [id], Dettagli del servizio. Aprire un Web browser e passare a http:// address, dove l'indirizzo IP è l'indirizzo IP assegnato dall'emulatore di calcolo; ad esempio , http://127.0.0.1:80. Verrà visualizzata la pagina iniziale di OWIN:

Illustrazione dell'indirizzo IP

Distribuisci in Azure

Per questo passaggio, è necessario disporre di un account Azure. Se non ne hai già uno, puoi creare un account di valutazione gratuito in pochi minuti. Per informazioni dettagliate, vedere Versione di valutazione gratuita di Microsoft Azure.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto AzureApp. Selezionare Pubblica.

Pubblicare l'illustrazione di AzureApp

Se non si è connessi all'account Azure, fare clic su Accedi.

Immagine di esempio di accesso

Dopo l'accesso, scegliere una sottoscrizione e fare clic su Avanti.

Esempio di immagine della sottoscrizione

Immettere un nome per il servizio cloud e scegliere un'area. Fare clic su Crea.

Creare un servizio cloud, esempio di immagine

Fare clic su Pubblica.

Pubblicare applicazione Azure appena creato, esempio di immagine

La finestra Log attività di Azure mostra lo stato di avanzamento della distribuzione. Quando l'app viene distribuita, passare a http://appname.cloudapp.net/, dove nome app è il nome del servizio cloud.

Risorse aggiuntive