Déclarer les WebApi dans un projet Web avec OWIN

Récemment, dans un projet, un collègue a eu un problème sur une middleware OWIN. Il arrivait à capturer le message lors de la requête mais impossible d’avoir quelques choses au niveau de la réponse.

Cela venait du fait que les Web Api n’étaient pas déclarer avec le system OWIN. A cause de cela, le middelware était bien appelé dans le pipeline de requête mais il semblerait qu’il n’était pas bien situé par rapport au middleware WebApi. (l’article ici explique comment sont intégrés les middleware OWIN dans le pipeline intégré de IIS)
Nous avions :
20141121_1
au lieu de :
20141121_2

Pour se placer complètement dans le mode OWIN il faut faire de la manière suivante :

Tout d’abord, rajouter une fichier (Startup.WebApi) de classe dans le répertoire App_Start :

image_thumb[4]

avec le corps suivant :

 
public partial class Startup
{ 
    private void ConfigureApi(IAppBuilder app) 
    { 
        var config = new HttpConfiguration(); 
        WebApiConfig.Register(config); 
        app.UseWebApi(config); 
    } 
} 

 

Ensuite dans le fichier Global.asax, commenter ou supprimer la ligne :

 
    GlobalConfiguration.Configure(WebApiConfig.Register); 

 

Enfin dans le fichier Startup.cs à la racine de votre projet, changer la méthode Configure pour qu’elle initialise les Api:

 
public void Configuration(IAppBuilder app) 
{ 
    ConfigureAuth(app); ConfigureApi(app); 
} 

voila à partir de maintenant vous pouvez utiliser app.use() au bon niveau dans votre pipeline Owin pour insérer de nouveaux middlewares.

Posted in ASP.NEt, Français | Tagged , , | Leave a comment

Découverte des services Azure Event Hub & Stream Analytics

Microsoft a sorti depuis peu un nouveau service nommé Stream Analytics. Ce service permet de se connecter à un stream d’évènement pour en faire de l’analyse en temps réel.

Un flux de donnée est analysé et il est alors possible de faire des agrégations d’informations sur ce flux de données. Pour ceux qui connaissait, c’est en gros la version SaaS hébergé dans Azure de l’outil StreamInsight de Microsoft.

Désormais, les applications web, les APIs ainsi que les outils connectés remontent ont besoins de remonter de nombreuses informations statistiques sur leurs états de santé (pour les objets) ou leurs utilisations (pour les API par exemple). Tout ses évènements ont besoin d’être rassemblés et ensuite analysés.

C’est le but des outils Azure Event Hub pour la collecte des évènements de vos applications et Stream Analytics pour l’analyse de vos données.

Dans les prochains billets , nous allons voir comment mettre en place une architecture pour :

  • visualiser les statistiques d’utilisation d’une API ,
  • créer des statistiques regroupés par tranche horaire
  • émettre des alertes lorsqu’un seuil de consultation est atteint.

Voici le schéma d’architecture globale de la solution :

image

Nous aurons besoin pour cela de :

  • Un site Web Azure pour hébergé les Api
    • Un middleware (owin) qui va intercepter les appels et généré les évènements
  • Un espace de nom Service Bus avec le hub d’évènements qui va récupéré nos métriques
  • Un Blob avec les données de références (correspondances entre ID et nom)
  • Un compte Azure Stream Analytics avec les jobs suivants :
    • Job PassThrough : pour récupérer tout les évènements et les stockées en bases
    • Job Per Min : pour aggréger les statistiques d’appels par Api
    • Job Throttle : pour générer une alerte si un seuil d’appel est dépassé

D’ici la, voici quelques liens pour la lecture :

Posted in Azure, Français | Tagged , , | Leave a comment

Azure WebJobs Part 3 : Activer un Job avec un Blob

Dans cette troisième partie, nous allons voir comment lancer le traitement d’un job à partir d’un nouveau blob dans notre espace de stockage.

Le scénario est le suivant, j’ai un Web Role qui héberge une gateway. J’ai de nombreux logs IIS qui sont stockés dans des blobs et je voudrais pouvoir faire des requêtes sur les données. Pour cela, je dois d’abord lire les blobs et envoyer les lignes qu’il contient dans une table Azure sur laquelle je pourrais faire mes requêtes.

Continue reading

Posted in Azure, Français | Tagged , , | 1 Comment

Azure WebSites–WebJobs en disponibilité générale

 

Ca y est, il y a un mois, le SDK des WebJobs passait en version 1.0.0RC. Depuis hier, le SDK est passé en mode Disponibilité Générale.

 

Pour rappel, les WebJobs (ou Tâches Web en français), vous permettent de créer des programmes ou méthodes qui ont la possibilité :

  • de tourner en tache de fond sur votre site web
  • d’être déclencher par une insertion dans une table azure, un blob
  • d’écouter sur une souscription de Service Bus
  • d’être déclencher par les taches planifiés (Scheduler Azure)

Un Dashboard complet permet d’avoir accès aux logs et exécution des méthodes. Enfin le mode AlwaysOn des Sites Web ou ils sont hébergés permet de s’assurer que les process de traitement soit toujours disponibles.

Toutes les ressources intéressantes se trouvent ici !

Posted in Azure, Français | Tagged , , | Leave a comment

Azure WebJobs Part 2 : Activer un job à partir d’une queue

Je remarque que j’ai complètement zappé de terminer mes tutos des webJobs. La version release 1.0 du SDK vient de sortir c’est donc une bonne occasion pour rattraper mon retard, surtout que certains choses ont changé et d’autre choses se sont améliorés sur le SDK.

Dans cette deuxième partie, nous allons voir comment déclencher un WebJob à partir d’une file d’attente de stockage Azure (Azure Queue Storage). Pour cela nous aurons besoin d’utiliser le SDK Web Job Azure disponible en package Nuget

Nous restons dans le scénario initiale qui est de déclencher une purge d’une base de données.

Création de l’application Console

Dans un premier temps , le sdk nous permet de configurer dans le corps de la méthod Main un host d’exécution. Ce host sera responsable d’analyser le code de notre application pour déterminer les différentes méthodes et points d’entrée de nos Jobs.

Cela se fait avec les deux déclarations suivantes :

 
var host = new JobHost(); 
host.RunAndBlock(); 

 

Le sdk a besoin de différentes chaines de connexion pour fonctionner, il y en a au moins 3 :

  • la chaine de connexion pour le dashboard :
  • la chaine de connexion
    • pour écouter sur des blobs ou  sur des queue storage
    • pour écouter sur des souscription de service bus

Par défaut, vous devez donc ajouter dans votre fichier de configuration les appSettings suivant :

  • AzureWebJobsDashboard
  • AzureWebJobsStorage
  • AzureWebJobsServicebus

Il est ensuite possible de spécifier les connexions que l’on souhaite dans le constructeur de la class JobHost.

Ce code va analyser les classes publiques ainsi que les méthodes publiques et statiques de notre assembly  afin de mettre en place des listeners sur les Queues Storage ou encore les Blob Storage.

Dans cette exemple, nous nous intéresseront au Queue :

 
public static void ListenToQueue([QueueTrigger("sqlpurge")] Table table) 
{ 
  var connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
  var queryString = String.Format("DELETE FROM dbo.{0} where [DateTimeUtc] < convert(datetime2,'{1}') ", table.Name,DateTime.UtcNow.AddMinutes(-3000).ToString("O")); 
  using (var connection = new SqlConnection( connectionString)) 
    { 
      var command = new SqlCommand( queryString, connection); 
      connection.Open(); 
      var query = command.ExecuteNonQuery(); 
      Console.WriteLine("Job éxecuté @ {0} : nombre de ligne supprimée : {1}", DateTime.UtcNow, query); 
    } 
} 

la signature de la méthode avec l’attribut QueueTrigger(Name), nous permet d’indiquer que nous souhaitons écouter sur une Queue de Storage Azure.

Dès qu’un message sera publier dans la Queue qui a le nom “SQLPurge”, il sera traduit par le SDK en objet de type Table et nous pourrons directement l’utiliser. L’objet de type Table est le suivant.

 
 
/// Ex: { "Name" : "Logs" } 
public class Table 
{ 
  public string Name { get; set; } 
} 

On peut lancer le WebJob en débug local sur la machine (on ne peut pas par contre se brancher sur l’émulateur Azure Storage) :

image

La méthode a bien été trouvée.

Nous allons donc publier le message au format JSON dans la queue :

image

Nous voyons qu’il est bien reçu par la méthode et parsé pour avoir un objet .Net.

Il est possible de configurer le délai de polling dans la queue mais par défault, depuis la version 1.0rc du SDK ce délai est de 1min.

Cette configuration est effectué au démarrage du host avec la classe suivante :

 
new JobHostQueuesConfiguration() 
{ 
  BatchSize = 10, 
  MaxDequeueCount = 1, 
  MaxPollingInterval = TimeSpan.FromMinutes(1) 
} 
Posted in Azure, Français | Tagged , | 1 Comment

Azure Hybrid Connexion : erreur à la configuration

Aujourd’hui, je me suis intéressé aux connexion hybride disponible sur Azure. J’ai eu un petit soucis lors de la configuration, chaque fois que je souhaitais rajouté un endpoint de communication ou monitorer mes connections hybrides depuis mon manager (Get-HybridConnection, etc…), j’avais une erreur du type :

Install failed! Exception: System.Management.Automation.CmdletInvocationException: Une ou plusieurs erreurs se sont produites. —> System.AggregateException: Une ou plusieurs erreurs se sont produites. —> System.Net.Http.HttpRequestException: An error occurred while sending the request. —> System.Net.WebException: Impossible de se connecter au serveur distant —> System.Net.Sockets.SocketException: Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 127.0.0.1:9352

 

Egalement, les commandes powershell se branche sur le service Hybrid Connection Listener. Le Listener peut se connecter mais les opérations de management ne sont pas possible:

image

Après quelques recherches, je vois qu’il existe un journal d’évènements qui s’est mis en place sur la plateforme (Microsoft/ServiceBus/Client/Operational) :

image

 

Dans le journal d’évènement, je vois une erreur beaucoup plus explicite :

HybridConnectionManager Management Server error: HTTP n’a pas pu inscrire l’URL http://+:9352/. Le processus n’a pas de droits d’accès à cet espace de noms (pour plus d’informations, voir http://go.microsoft.com/fwlink/?LinkId=70353).

Je suis sur une plateforme Windows 8.1 avec l’ACL d’activé, je dois donc penser à bien déclarer mes urls et mes espaces de noms authorisés. Un petit tour sur la commande dos en mode administrateur pour faire un netsh :

netsh http add urlacl url=http://+:9352/ user=”Tout le monde” (everyone, en fonction de la langue)

Après surtout, il faut penser à redémarrer le listener Hybrid Connection pour prendre en compte la nouvelle configuration des URLACL :

net stop HybridConnectionManager

net start HybridConnectionManager

et hop le tour est joué :

image

Posted in Azure, Français, Microsoft | Tagged , | Leave a comment

Authentification dans le Service Bus Azure : ACS vs Shared Access Signature (SAS)

 

Récemment, une question est tombée sur la liste de diffusion MVP concernant l’authentification au niveau du service pour le Service Relais, les publications dans les Topics et les souscriptions.

Je me permets donc de vous faire un petit résumé dans ce billet (issue de la discussion ainsi que du post de Brent Stineman que vous pouvez lire ici)

Pour ceux qui utilise le service bus depuis longtemps, vous avez déjà dû utiliser le portail Access Control Service pour configurer vos droits d’authentification au service bus. Le lien pour accéder à ce portail ACS était accessible depuis les informations de connexion au niveau global de votre espace de nom de service bus.

 

Continue reading

Posted in Français | Tagged , | Leave a comment