Création d'un gestionnaire de messages personnalisé – Informations de base

Dans les appels client-serveur traditionnels, le client envoie une requête Web au serveur, attend le résultat, puis reçoit une réponse. Il existe des gestionnaires de messages côté serveur et côté client, et vous devez parfois configurer des gestionnaires de messages personnalisés. Dans cet article, nous examinerons le concept de gestionnaire de messages et créerons un gestionnaire de messages personnalisé pour effectuer une tâche spécifique.

Qu’est-ce qu’un gestionnaire de messages ?

Par définition, un message handler est une classe qui reçoit une requête Web et renvoie une réponse. En d’autres termes, un gestionnaire de messages est utilisé pour traiter une demande de service Web en entrée et/ou pour traiter la réponse en sortie. La chaîne de gestionnaires est un pipeline, qui aura tous la possibilité de traiter une requête Web sortante avant qu’elle ne soit envoyée ou de traiter une réponse Web.

Le comportement des gestionnaires est régi par un ensemble de protocoles qui décrivent l’action que les gestionnaires de messages peuvent entreprendre dans une situation donnée. Les gestionnaires, leurs protocoles et leur place dans la chaîne peuvent être définis par un système ou par un utilisateur.

Gestionnaire de messages personnalisé

Les gens aiment la personnalisation, et parfois ils ont besoin d’exécuter une logique personnalisée dans une demande et une réponse. Vous pouvez ajouter des gestionnaires personnalisés au pipeline. Chaque gestionnaire dispose d’un choix d’actions qu’il peut réaliser. Par exemple, le gestionnaire peut être invoqué uniquement pour le traitement de la demande ou uniquement pour le traitement de la réponse.

Un ou plusieurs gestionnaires de messages personnalisés peuvent être créés et organisés en une chaîne de gestionnaires de messages qui sont appelés à chaque demande et à chaque réponse. Chaque requête Web passe par un pipeline de gestionnaires de messages, et nous pouvons créer des gestionnaires de messages personnalisés et étendre le comportement d’un pipeline existant. Graphiquement, le résultat ressemble à ceci :

Texte “Pipeline avec un gestionnaire de messages personnalisé”

Un gestionnaire de messages peut renvoyer une réponse immédiatement. Par exemple, vous pouvez créer un gestionnaire qui vérifie si un en-tête est présent dans les demandes sortantes. Si l’en-tête est manquant, il ne transmet pas la demande au gestionnaire suivant et génère une réponse d’erreur qu’il renvoie à l’appelant.

Texte “Le gestionnaire de message personnalisé renvoie une réponse”

Vous pouvez définir la chaîne de gestionnaires comme un pipeline capable de traiter la requête Web sortante avant de l’envoyer. Par exemple, ces gestionnaires peuvent vérifier le corps de la requête ou enregistrer certaines informations sur la requête. Prenons un exemple de création d’un gestionnaire de messages pour illustrer les concepts clés.

Créer un gestionnaire de messages personnalisé

Aspose.HTML for .NET offre une fonctionnalité permettant de créer des gestionnaires de messages personnalisés. Développons un gestionnaire personnalisé simple qui imprime un message au début et à la fin d’une requête. Procédez comme suit :

  1. Utilisez l’espace de nommage nécessaire, à savoir Aspose.Html.Net. Cet espace de noms est présenté par des classes et des interfaces qui sont chargées de faciliter le traitement des réseaux.

  2. Pour créer un gestionnaire de messages personnalisé, vous devez définir votre propre classe qui sera dérivée de la classe MessageHandler. La classe MessageHandler représente un type de base pour les gestionnaires de messages.

1using Aspose.Html.Net;
2...
3
4	public class LogMessageHandler : MessageHandler
5	{
6
7	}

Vous avez donc défini votre propre classe LogMessageHandler, et vous devez maintenant effectuer certaines opérations au sein de cette classe.

  1. Surchargez la méthode Invoke() de la classe MessageHandler pour mettre en œuvre le comportement du gestionnaire de messages personnalisé.
 1// Implement a message handler that prints a message about starting and finishing processing request
 2
 3public class LogMessageHandler : MessageHandler
 4{
 5    // Override the Invoke() method
 6    public override void Invoke(INetworkOperationContext context)
 7    {
 8        Debug.WriteLine("Start processing request: " + context.Request.RequestUri);
 9
10        // Invoke the next message handler in the chain
11        Next(context);
12
13        Debug.WriteLine("Finish processing request: " + context.Request.RequestUri);
14    }
15}
  1. Ajouter le LogMessageHandler au pipeline des gestionnaires de messages existants. Utilisez la méthode Insert() pour ajouter le LogMessageHandler à la première place dans la collection de gestionnaires de messages.

L’extrait de code suivant montre comment ajouter le LogMessageHandler au pipeline et l’utiliser pour une opération simple.

 1// Log network requests for HTML processing in C#
 2
 3// Create an instance of the Configuration class
 4using Configuration configuration = new Configuration();
 5
 6// Add the LogMessageHandler to the chain of existing message handlers
 7INetworkService service = configuration.GetService<INetworkService>();
 8MessageHandlerCollection handlers = service.MessageHandlers;
 9        
10handlers.Insert(0, new LogMessageHandler());
11
12// Prepare path to a source document file
13string documentPath = Path.Combine(DataDir, "input.htm");
14
15// Initialize an HTML document with specified configuration
16using HTMLDocument document = new HTMLDocument(documentPath, configuration);

Dans cet article, vous avez compris l’idée du gestionnaire de messages personnalisé et vous avez vu un exemple simple de sa mise en œuvre.

Dans l’article Cas d’utilisation populaires des gestionnaires de messages, vous apprendrez à créer des gestionnaires de messages pour mettre en œuvre un schéma personnalisé, travailler avec une archive ZIP et enregistrer le temps d’exécution d’une requête Web.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.