Сетевые тайм-ауты – Network Timeouts – C#
Тайм-ауты сети (Network Timeouts) могут возникать, когда сетевое соединение не может быть установлено или сервер слишком долго отвечает. Когда происходит тайм-аут сети, это может повлиять на функциональность программного приложения и вызвать ряд проблем. В этой статье мы обсудим, как установить Network Timeouts на C# с практическими примерами. Вы найдете простые примеры C# создания собственного обработчика сообщений для тайм-аутов сетевых операций.
Network Timeouts
Тайм-аут сети относится к количеству времени, в течение которого клиент, например программное приложение, ожидает ответа от сервера после отправки запроса. Значение тайм-аута установлено, чтобы избежать бесконечного ожидания ответа в случае, если сервер недоступен или не отвечает.
Сетевой тайм-аут – это лимит времени для выполнения сетевой операции, такой как отправка запроса или ожидание ответа. Если сетевая операция превышает время ожидания, считается, что она не удалась. Тайм-аут сети влияет на производительность и надежность сетевых коммуникаций, определяя максимальное количество времени, отведенное для успешного выполнения запроса. По истечении времени ожидания операция может быть прекращена, что приведет к ошибке или сбою. Тайм-аут сети – важный фактор, который следует учитывать при разработке сетевых приложений, поскольку он может повлиять на скорость отклика, скорость и доступность сетевого взаимодействия.
Обработчик сообщений о тайм-аутах сетевых операций
Чтобы установить максимальное время ожидания сетевой операции, вам нужно будет определить свой собственный обработчик сетевых запросов и зарегистрировать его в начале очереди таких обработчиков. Таким образом, все сетевые запросы будут проходить через него.
В следующем примере показано, как использовать эту функцию. Во-первых, давайте создадим собственный обработчик сетевых операций TimeoutMessageHandler, который установит максимальное время ожидания в сети на 1 секунду и просто передаст сообщение дальше по цепочке.
1// Define the TimeoutMessageHandler class that is derived from the MessageHandler class
2public class TimeoutMessageHandler : MessageHandler
3{
4 public override void Invoke(INetworkOperationContext context)
5 {
6 context.Request.Timeout = TimeSpan.FromSeconds(1);
7 Next(context);
8 }
9}
В приведенном выше фрагменте кода C# мы определяем собственный класс TimeoutMessageHandler. Класс наследуется от класса MessageHandler и переопределяет его Invoke(). В методе Invoke() для свойства Request объекта INetworkOperationContext, переданного в как параметр. Затем вызывается метод Next() для продолжения выполнения конвейера. Этот настраиваемый обработчик сообщений может установить определенное значение времени ожидания для сетевых операций в приложении.
Network Timeout для открытия HTML-файла
При выполнении сетевых запросов тайм-аут сети является важным аспектом, который следует учитывать. HTML-документы могут включать ресурсы, находящиеся в облаке или на другом сервере. Иногда запросы к удаленному ресурсу идут очень долго или не отвечают, тогда открытие документа может занимать бесконечно много времени. Если вы установите время ожидания операции, вы избежите длительного ожидания, но документ может открыться без некоторых «проблемных» ресурсов. Вот пример того, как вы можете использовать класс TimeoutMessageHandler
, чтобы установить время ожидания для открытия файла HTML с помощью библиотеки Aspose.HTML:
1// Create an instance of the Configuration class
2using var configuration = new Configuration();
3
4// Call the INetworkService which contains the functionality for managing network operations
5var network = configuration.GetService<INetworkService>();
6
7// Add the TimeoutMessageHandler to the top of existing message handler chain
8network.MessageHandlers.Insert(0, new TimeoutMessageHandler());
9
10// Prepare path to a source document file
11string documentPath = Path.Combine(DataDir, "document.html");
12
13// Create an HTML document with a custom configuration
14using var document = new HTMLDocument(documentPath, configuration);
В этом примере мы создаем экземпляр класса TimeoutMessageHandler и вставляем его вверху списка обработчиков сообщений в сетевой службе. Наконец, мы создаем экземпляр класса HTMLDocument, передавая путь к HTML-файлу и объекту конфигурации. Класс HTMLDocument будет использовать сетевую службу из объекта конфигурации для выполнения необходимых сетевых запросов.
Network Timeout для преобразования HTML
Давайте посмотрим на код C#, который устанавливает значение тайм-аута в 1 секунду для запросов, сделанных через класс TimeoutMessageHandler
в приложении .NET. В следующем примере показано, как установить время ожидания для операции преобразования HTML. В результате все сетевые операции, которые будут происходить во время конвертации и длятся более одной секунды, будут прерваны.
1// Create an instance of the Configuration class
2using var configuration = new Configuration();
3
4// Call the INetworkService which contains the functionality for managing network operations
5var network = configuration.GetService<INetworkService>();
6
7// Add the TimeoutMessageHandler to the top of existing message handler chain
8network.MessageHandlers.Insert(0, new TimeoutMessageHandler());
9
10// Prepare path to a source document file
11string documentPath = Path.Combine(DataDir, "document.html");
12
13// Prepare a path for converted file saving
14string savePath = Path.Combine(OutputDir, "document.pdf");
15
16// Convert HTML to PDF with customized configuration
17Converter.ConvertHTML(documentPath, configuration, new PdfSaveOptions(), savePath);
В этом примере TimeoutMessageHandler
добавляется в коллекцию MessageHandlers INetworkService, а значение тайм-аута устанавливается равным 1 секунде. Затем класс HTMLDocument используется для загрузки HTML-файла и выполнения преобразования.
Используя класс TimeoutMessageHandler и правильно обрабатывая Network Timeouts, вы можете обеспечить надежную и эффективную работу пользователя при преобразовании HTML-файлов.
Вы можете скачать полные примеры и файлы данных с GitHub.