Моя роль Azure захватывает материал для обработки из базы данных - он содержит экземпляр System.Data.SqlClient.SqlConnection
и периодически создает экземпляр SqlCommand
и выполняет SQL-запрос.
Теперь время от времени (обычно один раз в несколько дней) запуск запроса вызывает исключение SqlException
Служба столкнулась с ошибкой обработки вашего запроса. Пожалуйста, попробуйте еще раз. Код ошибки 40143. Серьезная ошибка произошла в текущей команде. Результаты, если таковые имеются, должны быть отброшены.
Что я уже видел много раз, и теперь мой код его ловит, вызывает Dispose()
в экземпляре SqlConnection
, а затем снова открывает соединение и повторяет запрос. Последнее обычно приводит к другому исключению SqlException
Время ожидания истекло. Период ожидания истекает до завершения операции или сервер не отвечает.
Что выглядит так, как сервер SQL Azure не отвечает или недоступен по любой причине.
В настоящее время мой код не улавливает последнее исключение, оно распространяется за пределами RoleEntryPoint.Run()
, и роль перезапускается. Обычно перезагрузка занимает около десяти минут, и как только она завершается, проблема пропадает в течение дня или около того.
Мне не нравится перезагрузка моей роли - это занимает некоторое время, и мне не мешают службы. Я бы хотел сделать что-то умнее.
Какова была бы стратегия решения этой проблемы? Должен ли я повторять запрос несколько раз и сколько раз и с какого интервала? Должен ли я делать что-то еще? Когда я сдаюсь и разрешу только что перезапустить роль?