Сетевые тайм-ауты – Network Timeouts – C#

Тайм-ауты сети (Network Timeouts) могут возникать, когда сетевое соединение не может быть установлено или сервер слишком долго отвечает. Когда происходит тайм-аут сети, это может повлиять на функциональность программного приложения и вызвать ряд проблем. В этой статье мы обсудим, как установить Network Timeouts на C# с практическими примерами. Вы найдете простые примеры C# создания собственного обработчика сообщений для тайм-аутов сетевых операций.

Network Timeouts

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

Обработчик сообщений о тайм-аутах сетевых операций

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

 1using System;
 2using Aspose.Html.Net;
 3...	
 4
 5	// Define the TimeoutMessageHandler class that is derived from the MessageHandler class
 6	public class TimeoutMessageHandler : MessageHandler
 7    {
 8        // Override the Invoke() method
 9		public override void Invoke(INetworkOperationContext context)
10        {
11            context.Request.Timeout = TimeSpan.FromSeconds(1);
12            Next(context);
13        }
14    }

В приведенном выше фрагменте кода C# мы определяем собственный класс TimeoutMessageHandler. Класс наследуется от класса MessageHandler и переопределяет его Invoke(). В методе Invoke() для свойства Request объекта INetworkOperationContext, переданного в как параметр. Затем вызывается метод Next() для продолжения выполнения конвейера. Этот настраиваемый обработчик сообщений может установить определенное значение времени ожидания для сетевых операций в приложении.

Network Timeout для открытия HTML-файла

При выполнении сетевых запросов тайм-аут сети является важным аспектом, который следует учитывать. HTML-документы могут включать ресурсы, находящиеся в облаке или на другом сервере. Иногда запросы к удаленному ресурсу идут очень долго или не отвечают, тогда открытие документа может занимать бесконечно много времени. Если вы установите время ожидания операции, вы избежите длительного ожидания, но документ может открыться без некоторых «проблемных» ресурсов. Вот пример того, как вы можете использовать класс TimeoutMessageHandler, чтобы установить время ожидания для открытия файла HTML с помощью библиотеки Aspose.HTML:

 1using Aspose.Html;
 2using Aspose.Html.Net;
 3using Aspose.Html.Services;
 4using System.IO;
 5...
 6
 7    // Create an instance of the Configuration class
 8    using var configuration = new Configuration();
 9
10    // Call the INetworkService which contains the functionality for managing network operations
11    var network = configuration.GetService<INetworkService>();
12
13    // Add the TimeoutMessageHandler to the top of existing message handler chain
14    network.MessageHandlers.Insert(0, new TimeoutMessageHandler());
15
16    // Prepare path to a source document file
17    string documentPath = Path.Combine(DataDir, "document.html");
18
19    // Create an HTML document with a custom configuration
20    using var document = new HTMLDocument(documentPath, configuration);

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

Network Timeout для преобразования HTML

Давайте посмотрим на код C#, который устанавливает значение тайм-аута в 1 секунду для запросов, сделанных через класс TimeoutMessageHandler в приложении .NET. В следующем примере показано, как установить время ожидания для операции преобразования HTML. В результате все сетевые операции, которые будут происходить во время конвертации и длятся более одной секунды, будут прерваны.

 1using Aspose.Html;
 2using Aspose.Html.Net;
 3using Aspose.Html.Services;
 4using Aspose.Html.Converters;
 5using Aspose.Html.Saving;
 6using System.IO;
 7...
 8
 9	// Create an instance of the Configuration class
10    using var configuration = new Configuration();
11
12    // Call the INetworkService which contains the functionality for managing network operations
13    var network = configuration.GetService<INetworkService>();
14
15    // Add the TimeoutMessageHandler to the top of existing message handler chain
16    network.MessageHandlers.Insert(0, new TimeoutMessageHandler());
17
18    // Prepare path to a source document file
19    string documentPath = Path.Combine(DataDir, "document.html");
20
21    // Prepare a path for converted file saving 
22    string savePath = Path.Combine(OutputDir, "document.pdf");
23
24    // Convert HTML to PDF with customized configuration
25    Converter.ConvertHTML(documentPath, configuration, new PdfSaveOptions(), savePath);

В этом примере TimeoutMessageHandler добавляется в коллекцию MessageHandlers INetworkService, а значение тайм-аута устанавливается равным 1 секунде. Затем класс HTMLDocument используется для загрузки HTML-файла и выполнения преобразования.

Используя класс TimeoutMessageHandler и правильно обрабатывая Network Timeouts, вы можете обеспечить надежную и эффективную работу пользователя при преобразовании HTML-файлов.

Вы можете скачать полные примеры и файлы данных с GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.