Héberger OWIN dans un rôle worker Azure

Ce tutoriel montre comment auto-héberger OWIN dans un rôle de travail Microsoft Azure.

Open Web Interface for .NET (OWIN) définit une abstraction entre les serveurs web .NET et les applications web. OWIN dissocie l’application web du serveur, ce qui rend OWIN idéal pour auto-héberger une application web dans votre propre processus, en dehors d’IIS, par exemple, à l’intérieur d’un rôle de travail Azure.

Dans ce tutoriel, vous allez apprendre à héberger automatiquement une application OWIN dans un rôle de travail Microsoft Azure. Pour en savoir plus sur les rôles de travail, consultez Modèles d’exécution Azure.

Versions logicielles utilisées dans le tutoriel

Créer un projet Microsoft Azure

Démarrez Visual Studio avec des privilèges d’administrateur. Des privilèges d’administrateur sont nécessaires pour déboguer l’application localement, à l’aide de l’émulateur de calcul Azure.

Dans le menu Fichier , cliquez sur Nouveau, puis sur Projet. Dans Modèles installés, sous Visual C#, cliquez sur Cloud , puis sur Service cloud Windows Azure. Nommez le projet « AzureApp », puis cliquez sur OK.

Exemple d’image de structure de fichier

Dans la boîte de dialogue Nouveau service cloud Azure Windows , double-cliquez sur Rôle de travail. Conservez le nom par défaut (« WorkerRole1 »). Cette étape ajoute un rôle de travail à la solution. Cliquez sur OK.

Boîte de dialogue Services cloud Azure

La solution Visual Studio créée contient deux projets :

  • « AzureApp » définit les rôles et la configuration de l’application Azure.
  • « WorkerRole1 » contient le code du rôle de travail.

En général, une application Azure peut contenir plusieurs rôles, bien que ce didacticiel utilise un seul rôle.

Explorateur de solutions, boîte de dialogue

Ajouter les packages de Self-Host OWIN

Dans le menu Outils , cliquez sur Gestionnaire de package NuGet, puis sur Console du Gestionnaire de package.

Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :

Install-Package Microsoft.Owin.SelfHost

Ajouter un point de terminaison HTTP

Dans Explorateur de solutions, développez le projet AzureApp. Développez le nœud Rôles, cliquez avec le bouton droit sur WorkerRole1, puis sélectionnez Propriétés.

Ajout d’une illustration de point de terminaison HTTP

Cliquez sur Points de terminaison, puis sur Ajouter un point de terminaison.

Dans la liste déroulante Protocole , sélectionnez « http ». Dans Port public et Port privé, tapez 80. Ces derniers peuvent être différents. Le port public est ce que les clients utilisent lorsqu’ils envoient une demande au rôle.

Exemple d’image de sélection de protocole

Créer la classe de démarrage OWIN

Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet WorkerRole1 et sélectionnez Ajouter une / classe pour ajouter une nouvelle classe. Nommez la classe Startup.

Remplacez tout le code réutilisable par les éléments suivants :

using Owin;

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

La UseWelcomePage méthode d’extension ajoute une page HTML simple à votre application pour vérifier que le site fonctionne.

Démarrer l’hôte OWIN

Ouvrez le fichier WorkerRole.cs. Cette classe définit le code qui s’exécute lorsque le rôle de travail est démarré et arrêté.

Ajoutez les instructions using suivantes :

using Microsoft.Owin.Hosting;

Ajoutez un membre IDisposable à la WorkerRole classe :

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

    // ....
}

Dans la OnStart méthode, ajoutez le code suivant pour démarrer l’hôte :

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

La méthode WebApp.Start démarre l’hôte OWIN. Le nom de la Startup classe est un paramètre de type de la méthode. Par convention, l’hôte appelle la Configure méthode de cette classe.

Remplacez le OnStop pour supprimer le instance _app :

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

Voici le code complet pour 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();
        }
    }
}

Générez la solution, puis appuyez sur F5 pour exécuter l’application localement dans l’émulateur de calcul Azure. Selon les paramètres de votre pare-feu, vous devrez peut-être autoriser l’émulateur à passer par votre pare-feu.

L’émulateur de calcul affecte une adresse IP locale au point de terminaison. Vous pouvez trouver l’adresse IP en affichant l’interface utilisateur de l’émulateur de calcul. Cliquez avec le bouton droit sur l’icône de l’émulateur dans la zone de notification de la barre des tâches, puis sélectionnez Afficher l’interface utilisateur de l’émulateur de calcul.

Illustration de l’émulateur de calcul

Recherchez l’adresse IP sous Déploiements de service, déploiement [id], Détails du service. Ouvrez un navigateur web et accédez à http:// adresse, où adresse est l’adresse IP attribuée par l’émulateur de calcul ; par exemple, http://127.0.0.1:80. La page d’accueil OWIN doit s’afficher :

Recherche d’une illustration d’adresse IP

Déployer sur Azure

Pour cette étape, vous devez disposer d’un compte Azure. Si vous n’en avez pas encore, vous pouvez créer un compte d’essai gratuit en quelques minutes. Pour plus d’informations, consultez Essai gratuit Microsoft Azure.

Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet AzureApp. Sélectionnez Publier.

Publier l’illustration AzureApp

Si vous n’êtes pas connecté à votre compte Azure, cliquez sur Se connecter.

Exemple d’image de connexion

Une fois connecté, choisissez un abonnement, puis cliquez sur Suivant.

Exemple de choix d’une image d’abonnement

Entrez un nom pour le service cloud et choisissez une région. Cliquez sur Créer.

Créer un service cloud, exemple d’image

Cliquez sur Publier.

Publier un Azure Application nouvellement créé, exemple d’image

La fenêtre Journal d’activité Azure affiche la progression du déploiement. Lorsque l’application est déployée, accédez à http://appname.cloudapp.net/, où appname est le nom de votre service cloud.

Ressources supplémentaires