Creación de un controlador de mensajes personalizado – información básica
En las llamadas tradicionales cliente-servidor, el cliente envía una solicitud web al servidor, espera el resultado y luego obtiene una respuesta. Hay controladores de mensajes tanto del lado del servidor como del lado del cliente y, a veces, es necesario configurar controladores de mensajes personalizados. En este artículo, consideramos el concepto de controlador de mensajes (message handlers) y creamos un controlador de mensajes personalizado para realizar una tarea específica.
¿Qué es un controlador de mensajes (Message Handlers)?
Por definición, un controlador de mensajes es una clase que recibe una solicitud web y devuelve una respuesta. En otras palabras, se utiliza un controlador de mensajes para procesar una solicitud de servicio web durante la entrada y/o para procesar la respuesta durante la salida. La cadena de controladores es una canalización, todos los cuales tendrán la oportunidad de procesar una solicitud web saliente antes de enviarla o procesar una respuesta web.
El comportamiento de los controladores se rige por un conjunto de protocolos que describen qué acciones pueden realizar los controladores de mensajes en una situación determinada. Los manejadores, sus protocolos y su lugar en la cadena pueden ser definidos por un sistema o por un usuario.
Controlador de mensajes personalizado
A las personas les gusta la personalización y, a veces, necesitan realizar una lógica personalizada en una solicitud y respuesta. Puede agregar controladores personalizados a la canalización. Cada manejador tiene una opción de acciones que puede realizar. Por ejemplo, el controlador puede invocarse sólo para el procesamiento de solicitudes o sólo para el procesamiento de respuestas.
Se pueden crear y organizar uno o más controladores de mensajes personalizados en una cadena de controladores de mensajes a los que se llama con cada solicitud y respuesta. Cada solicitud web pasa por una canalización de controlador de mensajes y podemos crear controladores de mensajes personalizados y ampliar el comportamiento de una canalización existente. Gráficamente, el resultado se parece a esto:
Un controlador de mensajes puede devolver una respuesta inmediatamente. Por ejemplo, podría crear un controlador que verifique si hay un encabezado presente en las solicitudes salientes. Si falta el encabezado, no pasa la solicitud al siguiente controlador y genera una respuesta de error que devuelve a la persona que llama.
Puede definir la cadena del controlador como una canalización que podrá procesar la solicitud web saliente antes de enviarla. Por ejemplo, estos controladores pueden verificar el cuerpo de la solicitud o registrar alguna información sobre la solicitud. Considere un ejemplo de creación de un controlador de mensajes para mostrar los conceptos clave.
Crear un controlador de mensajes personalizado
Aspose.HTML for .NET ofrece funcionalidad para la creación de controladores de mensajes personalizados. Desarrollemos un controlador personalizado simple que imprima un mensaje cuando comienza y finaliza una solicitud. Tome los siguientes pasos:
Utilice el espacio de nombres necesario, que es Aspose.Html.Net. Este espacio de nombres se presenta mediante clases e interfaces que son responsables de facilitar el procesamiento de la red.
Para crear un controlador de mensajes personalizado, debe definir su propia clase que se derivará de la clase MessageHandler. La clase MessageHandler representa un tipo base para controladores de mensajes.
1using Aspose.Html.Net;
2...
3
4 public class LogMessageHandler : MessageHandler
5 {
6
7 }
Entonces, ha definido su propia clase LogMessageHandler, ahora necesita realizar alguna operación dentro de ella.
- Anule el método Invoke() de la clase MessageHandler para implementar el comportamiento personalizado del controlador de mensajes.
1// This message handler prints a message about start and finish processing request
2public class LogMessageHandler : MessageHandler
3{
4 // Override the Invoke() method
5 public override void Invoke(INetworkOperationContext context)
6 {
7 Debug.WriteLine("Start processing request: " + context.Request.RequestUri);
8
9 // Invoke the next message handler in the chain
10 Next(context);
11
12 Debug.WriteLine("Finish processing request: " + context.Request.RequestUri);
13 }
14}
- Agregue LogMessageHandler a la canalización de controladores de mensajes existentes. Utilice el método Insert() para agregar LogMessageHandler en el primer lugar de la colección de controladores de mensajes.
El siguiente fragmento de código demuestra cómo agregar LogMessageHandler a la canalización y usarlo para una operación simple.
1// Create an instance of the Configuration class
2using var configuration = new Configuration();
3
4// Add the LogMessageHandler to the chain of existing message handlers
5var service = configuration.GetService<INetworkService>();
6var handlers = service.MessageHandlers;
7
8handlers.Insert(0, new LogMessageHandler());
9
10// Prepare path to a source document file
11string documentPath = Path.Combine(DataDir, "input.htm");
12
13// Initialize an HTML document with specified configuration
14using var document = new HTMLDocument(documentPath, configuration);
Entonces, en este artículo, entendió la idea detrás del controlador de mensajes personalizado y vio el ejemplo simple de su implementación.
En el artículo Casos de uso populares para controladores de mensajes, aprenderá cómo crear controladores de mensajes para implementar un esquema personalizado, trabajar con un archivo ZIP y registrar el tiempo de ejecución de una solicitud web.