Juin 2016

Volume 31, numéro 6

Cet article a fait l'objet d'une traduction automatique.

Azure App Services - Utiliser Azure App Services pour convertir une page Web en PDF

Par Benjamin Perkins

La fonction de conversion page à un document PDF n’y a rien de nouveau, mais mon objectif — pour placer un lien sur mon site Web fourni par les visiteurs un moyen simple de convertir une page spécifique à un document PDF en temps réel : révélé quelque peu compliqué. Il existe des nombreux sites Web et les fichiers binaires open source qui vous permettent de le faire, mais je n’étais pas jamais en mesure de se connecter à tous les points et obtenez la sortie souhaitée dans la façon dont je souhaitais qu’il.

Le mieux ou moins mon convertisseur favori, page Web au format PDF est le programme open source appelé wkhtmltopdf (wkhtmltopdf.org), qui utilise la ligne de commande, comme indiqué dans Figure 1.

Exécutez le convertisseur wkhtmltopdf depuis la Console
Figure 1 le convertisseur wkhtmltopdf en cours d’exécution à partir de la Console

Toutefois, l’exécution d’un programme à partir d’une ligne de commande est très éloigné de conversion en temps réel avec un bouton sur une page Web.

J’ai travaillé sur différentes parties de cette solution au cours des mois, mais l’exécution du processus wkhtmltopdf obstinément m’empêche d’atteindre mon objectif. La question qui sont restés sans réponse était : « Comment puis-je obtenir Microsoft Azure App Service Web Apps pour générer cette procédure pour créer le fichier PDF? » Application Service Web Apps s’exécute dans un bac à sable et à partir du début, je savais que je ne pouvais pas le faire, il y avait aucune possibilité d’avoir une demande envoyée à partir d’un client de démarrage et un processus en cours d’exécution sur le serveur de l’ordinateur. Ayant travaillé sur l’équipe IIS de prise en charge de nombreuses années, je savais qu’y arriver même sur une version autonome d’IIS requiert la mise en veille de perdre des configurations qui rendent les analystes de sécurité. Ensuite, j’ai pensé que des tâches Web.

Tâches Web est effectuées pour ce type de situation, car ils peuvent exécuter des exécutables en continu ou au déclenchement d’une source externe ; par exemple, manuellement à partir de Windows Azure SDK ou en utilisant un planificateur Azure, CRON ou l’API de tâche Web Azure (bit.ly/1SD9gVJ). Et, suffi, la réponse. Je peux appeler le wkhtmltopdf à partir de mon application App Service Web à l’aide de l’API de tâche Web. Les autres composants de la solution avaient déjà été utilisées ; J’ai dû enfin la dernière pièce du puzzle, en tant que Figure 2 montre.

La Solution complète
Figure 2 la Solution complète

L’exemple de code contient un site Web ASP.NET avec une page d’index qui permet à un utilisateur d’entrer une URL, d’envoyer cette page Web à convertir au format PDF, puis télécharger le fichier PDF à un périphérique client. Il prend très peu d’efforts pour dynamiquement définir cette URL à la page active et le bouton Envoyer la page à l’API de tâche Web pour la conversion et le télécharger. Les sections suivantes de cet article traitent les technologies utilisées pour créer la solution et explique comment vous pouvez créer et les utiliser.

Vue d’ensemble du convertisseur de code HTML au format PDF

J’ai utilisé plusieurs technologies pour créer la solution d’application Web HTML-PDF App Service en temps réel. La table Figure 3 présente une brève description de ces technologies, et je les décrivent plus en détail dans les sections qui suivent.

Figure 3 les Technologies utilisées dans la Solution

Technologie Brève description
Azure App Service Web App (S2 Plan) Front-end qui héberge le code de SignalR
Autorisation et authentification du Service d’application Confirme l’identité du client
Azure Storage Stocke le document PDF
Tâche Web Azure Convertit le code HTML au format PDF, télécharge PDF Azure Storage
API de tâche Web Azure Une interface pour déclencher une tâche Web
SignalR ASP.NET (en anglais) Gère la réponse à partir du serveur au client

Chaque section inclut une description des technique et d’une technologie, ainsi que les détails des exigences de codage ou configuration. Ai commandé les différentes parties de la solution comme leur création, mais elle peut être effectuée à l’aide d’un nombre de séquences différentes. L’objectif technique consiste à passer une URL pour l’application Web App Service et d’obtenir un fichier PDF. Mettons-nous au travail.

Application Web Azure App Service

Services d’application Azure vous permet de travailler avec différents types d’application : Web, Mobile, logique (aperçu) et API. Tous les fonction Services d’application de la même façon dans le back-end, disposant chacun d’autres fonctionnalités configurables sur le serveur frontal. En back-end, je veux dire que les Services d’application exécutée dans les plans de service différents (gratuit, partagé, basique, Standard et Premium) et des tailles d’instance (F1-P4) ; consultez la page bit.ly/1CVtRec pour plus de détails. Les plans de fournissent des fonctionnalités telles que les emplacements de déploiement, les limites de l’espace disque, le nombre maximal, mise à l’échelle automatique d’instances et ainsi de suite, et les tailles des instances décrivent le nombre de processeurs dédiés, ainsi que la mémoire par application Service planifier (ASP), ce qui équivaut à une machine virtuelle (VM). Et fournissent des fonctionnalités spécialement conçues pour un type particulier de Service d’application pour que votre application déployée, configurée et en cours d’exécution dans le délai le plus court pour le serveur frontal, les fonctionnalités d’un Service d’application donné.

Pour le convertisseur HTML au format PDF, je vais utiliser une application S2 Azure App Service Web, car je n’ont pas besoin des fonctionnalités fournies par les autres types de Service d’application.

Pour commencer, créez l’application Web dans le portail Azure en sélectionnant Nouveau | Web et mobilité | Application Web, puis fournir le nom de l’application, abonnement, groupes de ressources et Plan App Service et appuyez sur le bouton Créer. Une fois que vous avez créé l’application, vous utilisez cet emplacement pour déployer le code source figurant dans la solution Visual Studio 2015 téléchargeable, convertHTMLtoPDF. Détails du déploiement sont fournis à la fin de l’article ; Vous devez apporter certaines modifications pour obtenir le code fonctionne avec votre application Web et la tâche Web spécifique.

Les applications Web, les applications mobiles et API incluent une fonctionnalité basée sur l’identité fédérée pour configurer l’authentification et autorisation avec Azure Active Directory et d’autres fournisseurs d’identité tels que Facebook, Microsoft Live, Twitter et ainsi de suite, comme indiqué dans la section suivante.

Autorisation et authentification du Service d’application

J’ai décidé de configurer l’authentification du Service application / d’autorisation des fonctionnalités pour mon application Web, car il convient parfaitement dans le schéma de SignalR, dans lequel un nom complet ou l’identité du client est souhaitable. SignalR crée un ID de connexion pour chaque client, mais il est plus convivial et plus personnel à utiliser le nom réel d’un visiteur lors de l’envoi ou de publication de messages. Cela est possible en capturant depuis le rappel de la fonctionnalité d’authentification, puis à afficher à l’aide du code SignalR. Comme j’ai implémenté le fournisseur d’identité (IDP) Account Microsoft, le nom de l’utilisateur authentifié est retourné dans l’en-tête de demande X-MS-CLIENT-nom de PRINCIPAL. Le nom de l’identité est également accessible à partir de la propriété System.Security.Principle.IPrinciple.Identity.Name.

Mise en route de l’authentification / fonctionnalité d’autorisation ne nécessite aucune modification de code sur le principal de l’application et vous pouvez simplement suivre les instructions fournies dans bit.ly/1MQZZdF. L’implémentation uniquement vous devez activez l’authentification du Service d’application, accessible à partir du Panneau de paramètres pour le Service d’application donnée et configurez une ou plusieurs des fournisseurs d’authentification, comme indiqué dans Figure 4.

L’authentification du Service d’application / de la fonctionnalité d’autorisation
Figure 4 l’authentification du Service d’application / de la fonctionnalité d’autorisation

La fonctionnalité offre de nombreux choix pour une Action à effectuer lorsque la demande n’est pas autorisé." Par exemple, pour accéder à l’application Web de HTML au format PDF, vous devez disposer d’un Account de Microsoft et être authentifiés par le fournisseur d’identité ; Aucun code d’application Web n’est exécutée avant que cette authentification IDP ait lieu. Dans ce cas, l’authentification préalable est requise parce que j’ai sélectionné « Journal de with Microsoft compte » à partir de la liste déroulante. Toutes les ressources de Service de l’application nécessitent cette authentification une fois qu’une action est appliquée. Vous pouvez configurer la fonctionnalité d’authentification afin que les visiteurs puissent accéder à une page de connexion ou d’autres points de terminaison de l’Azure Application Service hébergé, qui s’effectue en sélectionnant l’élément de demande (aucune action) autoriser dans la liste déroulante. Toutefois, il vous incombe ensuite le code de l’application pour restreindre l’accès à des pages protégées. Cette approche plus granulaire est généralement obtenue en vérifiant la valeur booléenne Context.User.Identity.IsAuthenticated avant d’exécuter le code dans la page.

Le dernier composant de la solution de conversion en temps réel, sans code HTML au format PDF est la création et la configuration du compte de stockage Azure et conteneur.

Azure Storage

Le conteneur de stockage Azure est l’emplacement où se trouve le fichier PDF pour le téléchargement. Si le conteneur de stockage est rendu publique, n’importe qui peut accéder aux fichiers hébergés dans le conteneur en référençant le nom de fichier à l’aide d’une URL telle que https://{storage-account}.blob.core.windows.net/{container-name}/{filename.pdf}. Insertion, mise à jour ou la suppression de fichiers à partir du conteneur requiert une clé d’accès lors de l’exécution par le code. Exécution via le portail de gestion Azure, ou à partir de Visual Studio peut être restreint à l’aide du contrôle d’accès basé sur les rôles (RBAC), ou simplement en refusant l’accès des utilisateurs à l’abonnement Azure.

Pour créer le compte de stockage, sélectionnez Nouveau | Données + le stockage et le compte de stockage. L’attribut Name est le compte de stockage dans lequel le conteneur est créé et la première partie de l’URL : https//{storage-account}.blob.core.windows.net. L’attribut de modèle de déploiement vous permet de choisir le Gestionnaire de ressources ou classique. Sauf si vous avez déployées dans un réseau virtuel classique (VNET) des applications existantes, il est recommandé de qu'utiliser le Gestionnaire de ressources pour toutes les activités de développement de nouvelles. Le Gestionnaire de ressources Azure (ARM) est une approche plus déclarative qui utilise des modèles et scripts. En revanche, l’interfaçage avec le modèle classique, communément comme Azure Service Manager (ASM), est effectuée généralement à l’aide de code et les bibliothèques.

Lorsque vous décidez de choisir Standard ou des performances hors pair, vous souhaiterez prendre en compte le coût et le débit. Standard est le plus économique et est idéal pour les applications qui stockent des données en bloc rarement. Stockage de prime est sauvegardée par les disques SSD (SSD) qui offrent des performances optimales pour les machines virtuelles avec des exigences d’e/s intensifs.

L’attribut de réplication a de nombreuses options — Local, Zone, Global et accès en lecture mondial, chacun d’eux fournissant d’un niveau supérieur de redundency et d’accessibilité. J’utilisé les paramètres par défaut de la solution de code HTML au format PDF et sélectionné l’abonnement même, le groupe de ressources et un emplacement pour l’application Web créée précédemment.

Enfin, après la création du compte de stockage, sélectionnez services de BLOB de la lame général de compte de stockage, puis ajoutez le conteneur.

Le Type d’accès sur la nouvelle blade de conteneur peut être soit privée (une clé d’accès est requise pour toutes les opérations), le Blob (permet un accès en lecture publique) ou le conteneur (permet l’accès en lecture et liste publique).

C’est tout, qui est la configuration Azure est requise pour cette solution. Nous allons passer C# code maintenant pour savoir comment obtenir cette conversion HTML-PDF en temps réel pour fonctionner.

Tâche Web Azure

La fonctionnalité WebJob d’Azure prend en charge de l’exécution d’un fichier script ou exécutable de manière continue, déclenchée ou planifiée (bit.ly/1Og9P95). Ne confondez pas ceci avec un Service Windows ; le considérer plutôt comme une tâche de tâche ou de traitement par lots qui doit s’exécuter à certains moments ou lorsqu’un certain événement se produit. Dans ce cas, à l’aide de déclencheurs d’outil de conversion HTML-PDF en temps réel le WebJob à l’aide de l’API. Vous pouvez également WebJobs peut être lancé manuellement via Visual Studio ou en utilisant la fonctionnalité de Collections de tâche de planificateur Azure.

La plate-forme de services d’application Azure détermine si la WebJob est déclenchée ou continue selon le chemin d’accès dans lequel le WebJob est stocké. Si le WebJob est déclenché, il doit être déployé dans le nom de d:\home\site\wwwroot\app_data\jobs\triggered\{job} répertoire ; Si elle est continue, remplacez simplement le chemin du répertoire déclenchée avec continue. Pour déployer le WebJob, ajoutez le répertoire app_data\jobs\triggered\ {nom de tâche} à un projet de site Web dans Visual Studio, ajouter le script ou l’exécutable, similaire à ce qui est décrit dans bit.ly/1Uczf8L, et le publier sur la plate-forme de services d’application Azure.

Le WebJob créé effectue deux tâches, conversion d’un fichier PDF la page à une adresse Web donnée et le téléchargement de ce fichier PDF à un conteneur de stockage Azure. Je pourrais avoir appelé wkhtmltopdf.exe directement à l’aide de l’API WebJob, mais j’aurait dû appeler une deuxième API puis télécharger le fichier de stockage et qu’avez aurait impliqué beaucoup de complexité de la gestion du fichier et envoyer le résultat au client. Par conséquent, j’ai créé une application console appelée convertToPdf (que vous pouvez voir dans la code source) qui exécute ces deux tâches, une après l’autre et retourne l’emplacement du fichier PDF au client ayant fait la demande.

Pour démarrer wkhtmltopdf.exe et passez-lui les deux des paramètres requis : l’adresse Web et le nom du fichier PDF : j’ai utilisé System.Diagnostics.ProcessStartInfo, comme indiqué dans Figure 5.

Figure 5 démarrage wkhtmltopdf.exe

static void Main(string[] args)
{
  var URL = args[0];
  var filename = args[1];
  try
  { 
    using (var p = new System.Diagnostics.Process())
    {
      var startInfo = new System.Diagnostics.ProcessStartInfo
      {
        FileName = "wkhtmltopdf.exe",
        Arguments = URL + " " + filename,
        UseShellExecute = false
      };
      p.StartInfo = startInfo;
      p.Start();
      p.WaitForExit();
      p.Close();
    }
  }
  catch (Exception ex) { WriteLine($"Something Happened: {ex.Message}"); }
}

Le code crée une instance de la classe ProcessStartInfo et définit le nom de fichier, les Arguments et les autres propriétés de la classe. La méthode démarre le processus identifié par la propriété FileName, attend qu’elle se termine, puis s’arrête le processus. Par défaut, lorsque le WebJob est chargé dans l’environnement de Service d’application Azure, il est copié par la plate-forme vers un répertoire local temporaire : D:\local\temp\jobs\triggered\ {nom de tâche} \ *** \, où *** est un nom de répertoire générée dynamiquement. C’est également le fichier PDF emplacement physique avant téléchargées vers le conteneur de stockage Azure. Le fichier étant local uniquement, il n’est pas persistant ou accessible à toutes les autres instances de l’application Azure Application Service Web. Si vous utilisez plusieurs instances, vous ne le voyez pas dans le répertoire local, mais le conteneur de stockage Azure est accessible globalement.

Une fois que le fichier PDF est créé, il doit être téléchargé vers le conteneur de stockage Azure. Vous trouverez un excellent didacticiel qui explique en détail comment procéder au bit.ly/1OAXIQ0. En résumé, la possibilité de créer, lire, mettre à jour et supprimer le contenu d’un conteneur est contrôlée par deux packages NuGet, la bibliothèque du Gestionnaire de Configuration de Microsoft Azure pour .NET et la bibliothèque Client de stockage Microsoft Azure pour .NET. Les deux packages sont référencés à partir de l’application de console WebJob de convertToPdf. Pour les installer, cliquez sur le projet d’application console, puis sur Gérer les Packages NuGet. Recherchez et installez les bibliothèques.

J’ai utilisé CloudConfigurationManager.GetSetting, qui fait partie de la bibliothèque du Gestionnaire de Configuration de Microsoft Azure, pour récupérer les valeurs de chaîne de connexion de stockage pour la connexion avec le conteneur de stockage Azure. Les valeurs sont le nom de compte, qui est le compte de stockage Azure nom (dans ce cas, converthtmltopdf), pas le nom du conteneur et le AccountKey, qui est extraite de la lame de compte de stockage en cliquant sur paramètres | Touches d’accès rapide. Figure 6 montre comment télécharger le fichier PDF pour le conteneur de stockage d’Azure créé précédemment.

La figure 6, télécharger le fichier PDF à un conteneur de stockage Azure

static void Main(string[] args)
{
  try
  {
    CloudStorageAccount storageAccount =
      CloudStorageAccount.Parse(
      CloudConfigurationManager.GetSetting("StorageConnectionString"));
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container =
      blobClient.GetContainerReference("pdf");
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
    using (var fileStream = System.IO.File.OpenRead(filename))
    {
      blockBlob.UploadFromStream(fileStream);
    }
  }
  catch (StorageException ex) { WriteLine($"StorageException: {ex.Message}"); }
  catch (Exception ex) { WriteLine($"Exception: {ex.Message}"); }
}

Ces informations de configuration sont utilisées comme entrée pour la classe CloudStorageAccount, qui fait partie de la bibliothèque Client de stockage Microsoft Azure. Comme alternative à la CloudConfigurationManager pour récupérer le StorageConnectionString du fichier App.config, vous pouvez utiliser System.Configuration.ConfigurationManager.AppSettings["StorageConnectionString"].

J’ai une instance de la classe CloudStorageAccount permet de créer un CloudBlobClient, puis le blobClient permet d’obtenir une référence au conteneur de stockage Azure avec la méthode GetContainerReference. Puis, à l’aide de la méthode GetBlockBlobReference de la classe CloudBlobContainer, pour créer un CloudBlockBlob contenant le nom du fichier en cours de téléchargement. Les deux fichiers exécutables, comme indiqués précédemment, se trouvent dans le répertoire D:\local\temp\jobs\triggered\convertToPdf\***\, au même endroit où le fichier PDF est stocké et référencé. C’est pourquoi aucun chemin d’accès au nom de fichier n’est requis, car le fichier est créé dans le même répertoire que les exécutables temporaire. En dernier lieu, je passe une instance de System.IO.FileStream à l’aide de la méthode System.IO.File.OpenRead et téléchargez-le vers le conteneur à l’aide de la méthode UploadFromStream de la classe CloudBlockBlock.

Une fois que le code est terminé et compile, ajoutez wkhtmltopdf.exe et le convertToPdf.exe dans le répertoire \app_data\jobs\triggered\convertToPdf de la solution Visual Studio qui sera publié dans l’application Web Azure App Service. Vous pouvez également publier uniquement les fichiers de tâche Web à l’aide d’un outil FTP, transférer le code directement sur le site Web.

Maintenant que la tâche Web qui crée et enregistre le fichier PDF convertToPdf est terminée, nous allons voir comment appeler la tâche Web à partir du code c# à l’aide de l’objet HttpClient. Après cela, il reste consiste à créer un frontal SignalR Azure App Service Web application pour permettre un visiteur envoyer une URL pour la tâche Web et d’obtenir l’URL pour le fichier PDF téléchargeable.

API de tâche Web Azure

J’ai écrit un article sur l’API de tâche Web Azure (bit.ly/1SD9gVJ) dans lequel j’ai abordé comment appeler l’API qui déclenche la tâche Web. En bref, l’API de la tâche Web est une interface Web qui exécute un script ou exécutable à l’aide des arguments passés dans l’URL.

Avant de créer le concentrateur SignalR qui déclenche la tâche Web API, j’ai créé un consommateur d’application console simple, illustré Figure 7, qui appelle l’API de tâche Web. Il est inclus dans la solution téléchargeable et est appelé convertToPDF-consommateur. Cette application console simplifiée du codage, résolution des problèmes et de test que vous supprimiez la fonctionnalité SignalR du scénario.

Figure 7 le consommateur d’Application Console Simple

static async Task<string> ConvertToPDFWebJobAPIAsync(string Url)
{
  try
  {
    using (var client = new HttpClient())
    {
      client.BaseAddress = new Uri(
        "https://converthtmltopdf.scm.azurewebsites.net/");
      client.DefaultRequestHeaders.Accept.Clear();
      var userName = "your userName";
      var password = "your userPWD ";
      var encoding = new ASCIIEncoding();
      var authHeader =
        new AuthenticationHeaderValue("Basic",
          Convert.ToBase64String(
          encoding.GetBytes(string.Format($"{userName}:{password}"))));
      client.DefaultRequestHeaders.Authorization = authHeader;
      var content = new System.Net.Http.StringContent("");
      string filename = Guid.NewGuid().ToString("N").Substring(0, 8) + ".pdf";
      HttpResponseMessage response =
        await client.PostAsync(
        $"api/triggeredwebjobs/convertToPDF/run?arguments={Url} 
          {filename}", content);
      if (!response.IsSuccessStatusCode)
      {
        return $"Conversion for {Url} {filename} failed: " +
          DateTime.Now.ToString();
      }
      return $"{response.StatusCode.ToString()}:
        your PDF can be downloaded from here:";
    }
  }
  catch (Exception ex)  {  return ex.Message;  } }

Utilisez la méthode HttpClient de classe de System.Net.Http.HttpClient pour effectuer la demande. Ensuite, utiliser la gestion de contrôle de Source de SCM URL basée sur Azure App Service Web application comme la propriété BaseAddress pour la demande. Comme vous le savez peut-être, chaque application Web Azure App Service est fourni avec une URL SCM (également appelée console KUDU) qui est accessible à l’aide de https://{appname}.scm.azurewebsites.net et l’URL utilisée pour appeler l’API de tâche Web. Ajouter /basicAuth à la fin de l’URL permet de s’authentifier à l’aide d’une négociation de stimulation / réponse de base du client. Le nom d’utilisateur et le mot de passe sont les informations d’identification du profil de publication, qui sont téléchargeables à partir du portail de gestion Azure en accédant à l’application Azure App Service Web et en sélectionnant obtenir le profil de publication. Dans le téléchargement *. Fichier de paramètres de publication que vous trouverez le nom d’utilisateur et userPWD à utiliser dans le code. Pour plus de simplicité, j’ai codé en dur le nom d’utilisateur et le mot de passe dans l’application, mais pour le monde réel, ces doivent être placés dans un emplacement sûr et récupérées à partir du code, afin de les modifier si vous le souhaitez en sélectionnant le profil de publication de réinitialisation dans le portail de gestion. Vous ne souhaitez pas avoir à déployer le code mis à jour chaque fois que quelque chose change.

L’authentification de base nécessite l’association d’une chaîne ASCII encodé en base 64 du nom d’utilisateur et le mot de passe à l’en-tête de base dans ce format : Comme base. Une fois que la valeur d’en-tête est créée à l’aide de la méthode ASCIIEncoding de la classe System.TextASCIIEncoding, ainsi que la méthode ToBase64String de la classe System.Convert, ajoutez-le à une nouvelle instance de la classe System.Net.Http.Headers.AuthenticationHeaderValue ainsi que le nom de l’en-tête de base. Utiliser l’instance de la classe System.Net.Http.HttpClient créée dans à l’aide de l’instruction pour ajouter la AuthenticationHeaderValue à la propriété DefaultRequestHeaders.Authorization de la classe System.Net.Http.Headers.HttpRequestHeaders.

Le nom de fichier, j’ai utilisé huit caractères d’un GUID à l’aide de la classe String, cette méthode supprime le GUID des tirets. Il a été créé à l’aide de la méthode NewGuid de la classe System.Guid, en passant un paramètre « N » à la méthode ToString de la classe Guid. Enfin, j’ai asynchrone publié à l’API de tâche Web à l’aide de la méthode PostAsync de la classe System.Net.Http.HttpClient, en passant l’URL et le nom de fichier en tant qu’arguments de la tâche Web et attente de son achèvement. Lorsque le processus se termine correctement, l’URL vers le conteneur de stockage Azure avec le nom de fichier concaténée s’affiche dans la console, dans le cas contraire, une notification est envoyée que la création du fichier PDF a échoué.

Pour afficher l’état de la tâche Web, accédez au portail de gestion Azure, accédez à l’application Azure App Service Web exécute la tâche Web, puis sélectionnez Paramètres | Les tâches Web. Le panneau tâches Web contient le nom, Type, statut et un lien très utile dans les journaux de l’exécution de tâche Web. Cliquez sur le lien pour accéder à une console KUDU de tâche Web spécifique pour afficher les exécutions de tâche récentes, leur état et un lien vers la sortie de journal réelle de la tâche Web, comme indiqué dans Figure 8. Par exemple, si la tâche Web est une application console, lorsque vous utilisez la méthode System.Console.WriteLine pour écrire l’état de l’exécution dans la fenêtre de sortie de console, ces informations sont également écrites dans le journal de la tâche Web et peut être affichées via le lien à partir du portail de gestion Azure.

Journal de sortie de tâche Web Azure
Journal de sortie de tâche Web Azure figure 8

Une fois cette partie fonctionne comme prévu, tout ce qui est resté était simplement un simple copier- coller dans la solution de SignalR abordés plue loin.

SignalR ASP.NET (en anglais)

ASP.NET SignalR est une bibliothèque open source pour les développeurs ASP.NET faciliter l’envoi des notifications en temps réel, Web, mobiles ou des applications clientes .NET. Le serveur au client RPC (RPC) utilise une API qui appelle des fonctions JavaScript sur le client à partir du code .NET côté serveur. Avant l’existence de cette technologie, une approche commune pour l’obtention d’une solution similaire utilisait un contrôle UpdatePanel d’ASP.NET qui est fréquemment actualisé en effectuant une demande au serveur pour vérifier s’il existe des changements dans l’état des données. C’est beaucoup plus une approche par extraction de données, où le client déclenche la demande vers le serveur au lieu du serveur d’envoyer les données en temps réel au client dès qu’il est devenu disponible.

Le code JavaScript côté client instancie un proxy de Hub, expose les méthodes du serveur peut se déclencher et identifie la méthode côté serveur pour appeler (envoyer) lors d’un événement click se produit :

var pdf = $.connection.pDFHub;
pdf.client.broadcastMessage = function (userId, message) {};
pdf.client.individualMessage = function (userId, message) {};
$('#sendmessage').click(function () {
  pdf.server.send($('#displayname').val(), $('#message').val());
});

Le nom du proxy concentrateur dans le code JavaScript côté client est le nom du concentrateur créé pour s’exécuter sur le côté serveur ; Dans cet exemple, le concentrateur est nommé PDFHub, et il hérite de la classe Microsoft.AspNet.SignalR.Hub. Les deux méthodes exposées par le client sont broadcastMessage et individualMessage ; chacun a une fonction avec des paramètres qui correspondent au modèle de la méthode Send, userId et message côté serveur. La méthode Send est appelée sur le serveur lorsque l’utilisateur clique sur le bouton Envoyer par un visiteur sur l’application Web. La méthode ConvertToPDFWebJobAsync est un copier- coller de l’application de console créée dans la section précédente qui appelle l’API de la tâche Web Azure pour convertir la page Web fournie dans un fichier PDF et les charger dans un conteneur de stockage Azure. Enfin, la méthode d’envoi côté serveur, utilise une instance de la propriété Microsoft.AspNet.SignalR.Hub.Clients, qui implémente l’interface IHubCallerConnectionContext. La propriété Clients est liée aux deux méthodes côté client et fournit les informations envoyées à partir du serveur aux clients appropriés (voir Figure 9).

Figure 9 la classe PDFHub

public class PDFHub : Hub
{
  public void Send(string userId, string message)
  {
    string name = Context.User.Identity.Name;
    string convertMessage = "no message yet";           
    Task.Run(async () =>
    {
      convertMessage = await ConvertToPDFWebJobAPIAsync(message);
    }).Wait();
    Clients.All.broadcastMessage(userId, "just converted: " + message +
      " to a pdf");
    Clients.Client(Context.ConnectionId).individualMessage(
      name, convertMessage);
  }
}

Vous vous demandez peut-être pourquoi j’ai choisi de SignalR pour utiliser l’API de la tâche Web Azure au lieu de simplement une simple application Web Form ASP.NET ou Web ASP.NET MVC. Il est vrai, il existe plusieurs façons de consommer une API. Par exemple, le code téléchargeable de cette solution contient une application console qui utilise l’API de tâche Web Azure, par conséquent, pourquoi utiliser SignalR ?

Pour répondre à cette question, notez que dans Figure 9 que lorsque le serveur possède un message pour les clients connectés, les deux méthodes côté client sont appelés. Tout d’abord, la méthode broadcastMessage avertit tous les clients connectés qu’une personne spécifique convertis en une URL donnée au format PDF, mais elle ne fournit pas le lien vers le conteneur de stockage Azure et d’un fichier PDF à télécharger. La deuxième méthode côté client est individualMessage, qui envoie l’état de l’HTML pour la conversion au format PDF et le lien vers le conteneur de stockage Azure avec le nom de fichier PDF concaténée. La raison de l’utilisation de SignalR consiste à donner une idée de l’interaction sociale à beaucoup de clients en fournissant des informations sur ce qui se passe sur l’application de Service Web de l’application Azure tous les clients connectés.

Rappel que précédemment j’ai mentionné le System.Security.Principle.IPrinciple.Identity.Name et indiqué comment il mis à l’application Web beaucoup plus convivial, car elle risquerait de rendre les nom d’un visiteur par exemple au client à la place de, un ID de connexion unique, mais générique. La propriété Context.User.Identity.Name est utilisée pour définir le nom du visiteur, validé par leur Account Microsoft, qui ajoute à l’acceptation sociale du client.

Tout cela doit à présent se produisent consiste à déployer le code (code client, le code serveur et une tâche Web Azure) dans la plateforme Azure App Service Web App à l’aide de Visual Studio ou une application FTP et la tester. Vous trouverez des instructions détaillées sur le déploiement vers une application Azure App Service Web à bit.ly/1nXnhmB.

Logiciel en tant que service (SaaS)

Lors de la rédaction de cet article, j’ai commencé à réfléchir sur les logiciels en tant que Service (SaaS) et indique si ce convertisseur HTML au format PDF en temps réel est une solution SaaS ou simplement une application API accessible en cours d’exécution dans le cloud. J’ai décidé que l’exposition de l’API de tâche Web Azure, par le nom lui-même, rend une API et SaaS pas. Pour ma solution, l’API de la tâche Web est exposé via une URL et protégé par l’authentification de base. L’API est disponible pour les autres consommateurs pour générer par-dessus ou pour ajouter des fonctionnalités à leurs applications, ce qui représente la définition d’une API. Toutefois, dès qu’il y a un consommateur de l’API, des fonctionnalités supplémentaires sont ajoutées autour de l’API consommé qui peut être utilisé par plusieurs utilisateurs en ligne, afin qu’il corresponde à la définition de SaaS. Par conséquent, l’API de la tâche Web Azure uniquement est simplement une API, tandis que mon client SignalR ASP.NET s’exécutant sur la plateforme Azure App Service Web Apps est une solution SaaS. Vérifiez qu’il n’est pas OneDrive, Office 365, Dynamics CRM Online ou Hotmail, mais si vous devez convertir un site Web au format PDF très rapide, vous savez où à venir.

Conclusion

Cet article a présenté des trois fonctionnalités de Azure : une application Web Azure App Service ; L’authentification du Service Azure et autorisation ; et un compte de stockage Azure et un conteneur. Ces fonctionnalités sont la plate-forme qui prend en charge de la tâche Web Azure, exposer l’API de tâche Web Azure et héberger le consommateur de Web ASP.NET SignalR. J’ai abordé chacune des fonctionnalités et les étapes nécessaires pour les configurer. Décrit également le code pour la tâche Web Azure, le code d’appel de l’API de tâche Web Azure et le client ASP.NET SignalR.


Benjamin Perkinsest un ingénieur chez Microsoft et auteur de quatre livres sur c#, IIS, NHibernate et Microsoft Azure. Il a récemment coécrit début c# 6 de programmation avec Visual Studio 2015 (John Wiley & Sons). Contactez-le à benperk@microsoft.com.

Merci à l'experte technique Microsoft suivante d'avoir relu cet article : Richard Marr
Richard Marr est ingénieur Senior chez Microsoft. Il a travaillé dans les organisations de support technique Microsoft depuis 16 ans, prenant en charge IIS, ASP.Net et actuellement avec les Services d’application Azure.