У меня есть веб-приложение MVC 5, работающее в .NET 4.7.2 и размещенное в Azure AppService, которое использует хранилище ключей Azure для хранения секретов.В проекте используется пакет Microsoft.Azure.KeyVault 3.0.3
NuGet, а секреты доступны с помощью KeyVaultClient
и .GetSecretAsync()
.Все ресурсы расположены в одном и том же регионе Azure.
В большинстве случаев это работает очень хорошо, и примерно в 90% случаев он возвращает секрет в миллисекундах.
Но время от времени вызов для доступа к хранилищу ключей не выполняется.Это не проявляется как исключение, выбрасываемое SDK, но веб-приложение зависает.В конце концов - и обычно примерно через 1 минуту, но иногда дольше - секрет возвращается, и все снова в порядке.Это связано с тем, что в SDK используется шаблон повторных попыток, который будет пытаться получить секрет.
Рассматривая Application Insights для AppService, я вижу, что запрос GET, сгенерированный SDK, получает ответ HTTP 500 отВыдается ключ Vault и SocketException с кодом результата ConnectFailure.
Исключение составляет:
Глядя на телеметрию и пошагово просматривая код, нет никакого элемента общности или очевидной причины.Кажется, это совершенно случайно.
Суть в том, что AppService, размещенный на Azure , иногда не может подключиться к хранилищу ключей, размещенному на Azure, в одном и том же центре обработки данных, используя последнюю платформу и версию SDK.
Кто-нибудь еще видел это или есть идеи?Я искал вокруг и нашел несколько случаев, когда люди сталкивались с той же проблемой, но ни у кого нет причины или решения.
РЕДАКТИРОВАТЬ (1): Я уже пытался раскрутить новое хранилище ключей в другом регионе.полностью, и проблема остается точно такой же.