.NET 4.7.1 上 HttpClientHandler.SslProtocol 的 PlatformNotSupportedException

PlatformNotSupportedException for HttpClientHandler.SslProtocol on .NET 4.7.1

我在 .NET Framework 4.7.1 中有以下代码:

using (var handler = new HttpClientHandler())
{
    handler.SslProtocols = SslProtocols.Tls12;

    ...
}

此代码适用于我的开发机器(Windows 10 企业版,内部版本 17101/rs4_release。180211-1040;版本 1803;OS 内部版本 17101.1000)。

相同的代码(当发布到已经安装了 .net Framework 4.7.1 的 Service Fabric 群集节点时)导致以下异常:

System.PlatformNotSupportedException: Operation is not supported on this platform.

集群节点是 运行 Windows Server 2012 R2 Data Center, Version 6.3 (Build 9600)

使用Resharper反编译代码时,我的桌面显示如下信息:

// Type: System.Net.Http.HttpClientHandler
// Assembly: System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// MVID: 7D453494-012A-4FA4-9E04-1C64E3A0FB6F
// Assembly location: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll

并且它在另一台本地服务器计算机上显示以下内容:

// Type: System.Net.Http.HttpClientHandler
// Assembly: System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// MVID: 641F4770-704A-420A-A419-A4FAF4195ADD
// Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Net.Http.dll

如你所见,组装位置不同,但我不知道这是什么意思。此外,我的本地计算机具有此注册表项值:

"Software\Microsoft\NET Framework Setup\NDP\v4\Full\Release": "461802"

并且集群节点有这个:

"Software\Microsoft\NET Framework Setup\NDP\v4\Full\Release": "461310"

documentation on how to determine the installed framework version 说:

On all other OS versions: 461310

但是我机器上的版本“461802”甚至没有列在那里!

有人可以提供有关如何解决此错误的指导(无需更改我的代码)吗?

虽然你不应该在 dotnet/announcement 回购中发布这个问题,但我不确定为什么人们在这里对你的问题投反对票;这是一个合理的问题。

属性 HttpClientHandler.SslProtocols 是在 .NET Framework 4.7.1 中添加的,但实际上并未实现(您可以将此称为错误)。

这已通过 .NET Framework 4.7.2 修复,这可能是它在您的开发计算机上运行的原因。