Исключения ретранслятора Azure
В этой статье перечислены некоторые исключения, создаваемые интерфейсами API ретранслятора Azure. Этот справочник может измениться, поэтому следите за обновлениями.
Категории исключений
Интерфейсы API ретранслятора создают исключения, которые можно разделить на указанные ниже категории. Кроме того, здесь указаны предлагаемые действия, которые можно предпринять для их разрешения.
Ошибка в коде пользователя.System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.
Общее действие. Прежде чем продолжить, попытайтесь исправить код.
Ошибка настройки или конфигурации.System.UnauthorizedAccessException.
Общее действие. Проверьте конфигурацию и измените ее при необходимости.
Временные исключения.Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.
Общее действие. Повторите операцию или уведомите пользователей.
Другие исключения.System.Transactions.TransactionException, System.TimeoutException.
Общее действие. Связано с типом исключения. Ознакомьтесь с таблицей в следующем разделе.
Типы исключений
В следующей таблице перечислены типы исключений обмена сообщениями и их причины, а также рекомендуемые действия, которые можно выполнять для их разрешения.
Тип исключения | Description | Рекомендуемое действие | Примечание к автоматическому или немедленному повтору |
---|---|---|---|
Время ожидания | Сервер не ответил на запрошенную операцию в течение указанного времени, контролируемого параметром OperationTimeout. Возможно, сервер выполнил запрошенную операцию. Это может произойти из-за задержек сети или другой инфраструктуры. | Проверьте состояние системы для обеспечения согласованности и при необходимости повторите попытку. Ознакомьтесь с разделом TimeoutException. | Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток. |
Недопустимая операция | Запрошенная пользователем операция не разрешается для выполнения в пределах сервера или службы. Подробные сведения см. в сообщении об исключении. | Проверьте код и обратитесь к документации. Убедитесь, что запрошенная операция допустима. | Повторная попытка не помогает. |
Операция отменена | Предпринята попытка вызвать операцию с объектом, который уже закрыт, прерван или удален. Иногда это означает, что внешняя транзакция уже удалена. | Проверьте код и убедитесь, что он не вызывает операции с использованием удаленного объекта. | Повторная попытка не помогает. |
Несанкционированный доступ | Объект TokenProvider не мог получить маркер, маркер недопустим, или маркер не содержит утверждений, необходимых для выполнения операции. | Убедитесь, что поставщик токенов создан с использованием правильных значений. Проверьте конфигурацию службы контроля доступа. | Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток. |
Исключение аргумента Аргумент Null Аргумент вне допустимого диапазона |
Далее приведены причины возникновения исключений: Для этого метода предоставлен один или несколько недопустимых аргументов. Универсальный код ресурса (URI), переданный в NamespaceManager или Create, содержит один или несколько сегментов пути. В NamespaceManager или Create передана недопустимая схема универсального кода ресурса (URI). Значение свойства превышает 32 КБ. |
Проверьте вызывающий код и убедитесь, что аргументы заданы правильно. | Повторная попытка не помогает. |
Сервер занят | Служба не может обработать запрос. | Клиент может некоторое время подождать, после чего следует повторить операцию. | Клиент может повторить операцию через определенный промежуток времени. Если в результате повтора возникает другое исключение, проверьте поведение повтора этого исключения. |
Превышена квота | Сущность обмена сообщениями достигла максимально допустимого размера. | Создайте в сущности пространство, получая сообщения из сущности или ее подочередей. Ознакомьтесь с разделом Исключение QuotaExceededException. | Повторная попытка может помочь, если сообщения были удалены. |
Превышен размер сообщения | Полезные данные сообщения превышают предел в 256 КБ. Обратите внимание, что предел в 256 КБ является общим размером сообщения с учетом системных свойств и служебных данных Microsoft .NET. | Сократите размер полезных данных сообщения, а затем повторите операцию. | Повторная попытка не помогает. |
QuotaExceededException
QuotaExceededException указывает на превышение квоты для конкретного объекта.
Для ретранслятора это исключение служит оболочкой для исключения System.ServiceModel.QuotaExceededException, указывающего, что для этой конечной точки превышено максимальное число прослушивателей. Оно указано в значении MaximumListenersPerEndpoint сообщения об исключении.
TimeoutException
TimeoutException указывает, что запущенная пользователем операция занимает больше времени, чем время ожидания операции.
Проверьте значение свойства ServicePointManager.DefaultConnectionLimit. Достижение этого ограничения также может породить исключение TimeoutException.
Для ретранслятора исключения времени ожидания могут отображаться при первом открытии подключения отправителя ретрансляции. Существует две основные причины этого исключения:
- слишком маленькое значение OpenTimeout (вплоть до доли секунды);
- неотвечающие локальные прослушиватели ретрансляции (или проблемы, связанные с тем, что правила брандмауэра запрещают прослушивателям принимать новые клиентские подключения) и значение OpenTimeout меньше 20 секунд.
Пример:
'System.TimeoutException’: The operation did not complete within the allotted timeout of 00:00:10.
The time allotted to this operation may have been a portion of a longer timeout.
Основные причины
Существует две основные причины этой ошибки.
Неправильная конфигурация
Время ожидания операции может быть слишком коротким для состояния операции. Время ожидания операции в пакете SDK клиента по умолчанию составляет 60 секунд. Проверьте, не задано ли в вашем коде слишком маленькое значение. Обратите внимание, что загрузка ЦП и состояние сети могут повлиять на время, необходимое для выполнения операции. Мы рекомендуем не задавать слишком маленькое значение времени ожидания операции.
Временная ошибка службы
Иногда в службе ретранслятора могут происходить задержки при обработке запросов. Это может произойти, например, в периоды высокого трафика. Если это происходит, повторите операцию после задержки, пока операция не будет выполнена успешно. Если же операцию по-прежнему не удается выполнить после нескольких попыток, посетите сайт состояния служб Azure, чтобы получить сведения об известных простоях служб.
Подключение ionLostException — NameRenewalFailed
Симптомы
Клиент получает исключение: Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
Причина
Служба Ретрансляции Azure перезапускает подключения прослушивателя каждые 24 часа. В этом весь замысел. Служба Ретранслятора Azure отключает активное подключение прослушивателя каждые 24 часа, и прослушиватель будет повторно подключаться к серверу с помощью механизма повторных попыток.
Разрешение
Никаких действий от вашей части в качестве прослушивателя автоматически подключается к серверу. Если вы заметили, что прослушиватель еще раз не подключается, отправьте запрос в службу поддержки.