1

我们有一些 .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();
}

提前致谢。

4

0 回答 0