我们有一些 .NET 代码调用位于Azure Frontdoor后面的 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();
}
提前致谢。