Создание пользовательского обработчика сообщений

В традиционных вызовах клиент-сервер клиент отправляет веб-запрос на сервер, ждет результата, а затем получает ответ. Существуют обработчики сообщений как на стороне сервера, так и на стороне клиента, и иногда вам необходимо настроить собственные обработчики сообщений. В этой статье мы рассмотрим концепцию обработчика сообщений и создадим собственный обработчик сообщений для выполнения конкретной задачи.

Что такое обработчик сообщений – Message Handler?

По определению обработчик сообщений – это класс, который получает веб-запрос и возвращает ответ. Другими словами, обработчик сообщений используется для обработки запроса веб-службы во время ввода и/или для обработки ответа во время вывода. Цепочка обработчиков – это конвейер, каждый из которых имеет возможность обработать исходящий веб-запрос до его отправки или обработать веб-ответ.

Поведение обработчиков регулируется набором протоколов, описывающих, какие действия обработчики сообщений могут выполнять в данной ситуации. Обработчики, их протоколы и их место в цепочке могут определяться системой или пользователем.

Пользовательский обработчик сообщений – Custom Message Handler

Людям нравится настройка, и иногда им нужно выполнить собственную логику в запросе и ответе. Вы можете добавить собственные обработчики в конвейер. У каждого обработчика есть выбор действий, которые он может выполнить. Например, обработчик можно вызвать только для обработки запроса или только для обработки ответа.

Можно создать один или несколько настраиваемых обработчиков сообщений и организовать их в цепочку обработчиков сообщений, которые вызываются при каждом запросе и ответе. Каждый веб-запрос проходит через конвейер обработчиков сообщений, и мы можем создавать собственные обработчики сообщений и расширять поведение существующего конвейера. Графически результат выглядит примерно так:

Текст “Конвейер с настраиваемым обработчиком сообщений”

Обработчик сообщений может немедленно вернуть ответ. Например, вы можете создать обработчик, который проверяет наличие заголовка в исходящих запросах. Если заголовок отсутствует, он не передает запрос следующему обработчику и генерирует ответ об ошибке, который возвращается вызывающей стороне.

Текст “Настраиваемый обработчик сообщений возвращает ответ”

Вы можете определить цепочку обработчиков как конвейер, который сможет обрабатывать исходящие веб-запросы перед их отправкой. Например, эти обработчики могут проверять тело запроса или регистрировать некоторую информацию о запросе. Рассмотрим пример создания обработчика сообщений, чтобы показать ключевые понятия.

Создайте собственный обработчик сообщений

Aspose.HTML for .NET предлагает функциональные возможности для создания пользовательских обработчиков сообщений. Давайте разработаем простой пользовательский обработчик, который выводит сообщение при запуске и завершении запроса. Выполните следующие действия:

  1. Используйте необходимое пространство имен, которым является Aspose.Html.Net. Это пространство имен представлено классами и интерфейсами, которые отвечают за упрощение сетевой обработки.
  2. Чтобы создать собственный обработчик сообщений, вам необходимо определить собственный класс, который будет производным от класса MessageHandler. Класс MessageHandler представляет базовый тип для обработчиков сообщений.
1using Aspose.Html.Net;
2...
3
4	public class LogMessageHandler : MessageHandler
5	{
6		
7	}

Итак, вы определили свой собственный класс LogMessageHandler, теперь вам нужно проделать в нем какую-то операцию. 3. Переопределите метод Invoke() класса MessageHandler для реализации пользовательского поведения обработчика сообщений.

 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}
  1. Добавьте LogMessageHandler в конвейер существующих обработчиков сообщений. Используйте метод Insert(), чтобы добавить LogMessageHandler на первое место в коллекции обработчиков сообщений.

В следующем фрагменте кода показано, как добавить LogMessageHandler в конвейер и использовать его для простой операции.

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

Итак, в этой статье вы получили представление о пользовательском обработчике сообщений и увидели простой пример его реализации.

В статье Популярные варианты использования обработчиков сообщений вы узнаете, как создавать обработчики сообщений для реализации пользовательского схемы, работать с ZIP-архивом и вести журнал времени выполнения веб-запроса.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.