У нас есть код. NET, который вызывает Azure веб-сайтов, стоящих позади Azure Входная дверь . Код использует HttpClient, чтобы сделать вызов очень простым способом. Мы начали получать следующую ошибку при обращении к нашим сайтам через Azure Frontdoor.
Существующее соединение было принудительно закрыто удаленным хостом
- Это происходит с. NET Framework 4.6,. NET Framework 4.7, &. NET Core 3.1.
- Фактическое имя сайта Frontdoor не имеет значения. Все, что заканчивается на
xxxx.azurefd.net
, генерирует эту ошибку. - Один и тот же код может напрямую воздействовать на приложения.
- Я могу повторить эту ошибку на разных Windows машинах. Мой ноутбук работает Windows 10. Мы также видели такое поведение на Windows Server 2012 и других машинах с Windows 10. Это корпоративные компьютеры, которые иногда работают за прокси-серверами, но они по-прежнему выдают ошибку, даже если нет за брандмауэром / прокси.
- Мы подозревали, что это некоторый тип ошибки, связанной с TLS, поскольку Azure Frontdoor поддерживает TLS1.2, только если вы не используете настраиваемый домен, но добавление TLS12 явно не Кажется, не помогает вообще.
Следующий код создает проблему.
static async Task Main(string[] args)
{
if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false)
{
ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12;
}
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Console.WriteLine($"Protocol: {ServicePointManager.SecurityProtocol}");
var client = new HttpClient { BaseAddress = new Uri("https://anything.azurefd.net") };
try
{
var result = await client.GetAsync("someroute");
Console.WriteLine(await result.Content.ReadAsStringAsync());
}
catch(Exception e)
{
while(e != null)
{
Console.WriteLine(e.Message);
e = e.InnerException;
}
}
Console.ReadLine();
}
Заранее спасибо.