C# 基础连接已关闭:仅在Windows server 2016上发送时发生意外错误

C# 基础连接已关闭:仅在Windows server 2016上发送时发生意外错误,c#,webclient,C#,Webclient,具有以下代码 using (var client = new WebClient()) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; ServicePointManager.

具有以下代码

      using (var client = new WebClient())
                {
                  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

                    ServicePointManager.Expect100Continue = true;
                    ServicePointManager.DefaultConnectionLimit = 9999;

                    byte[] data = client.DownloadData(resource.MainPictureUrl);

                    if (media.BinaryData == null)
                    {
                        Uri uri = new Uri(resource.MainPictureUrl);

                        media.BinaryData = BlobFactory.Service.CreateBlob(media.BinaryDataContainer, $".{extension}");
                    }
                    media.BinaryData.WriteAllBytes(data);
                }
它下载一个映像,这在本地环境中运行良好,但当我部署到服务器时。Windows Server 2016和IIS I收到以下错误消息

浏览过互联网,每个人都在谈论这一行:
ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

然而,这似乎没有帮助

一些提示,为什么它是特定于服务器的

运行ASP.NET版本:.NET CLR版本v4.0.30319

编辑

指定IE中图像的url。接收错误消息: 应显示此页面

在高级设置中打开TLS 1.0、TLS 1.1和TLS 1.2,然后再次尝试连接到https://站点uri。如果此错误仍然存在,则此站点可能使用不受支持的协议或密码套件,如RC4(详细信息链接),这被认为是不安全的

服务器上有任何阻止此操作的设置吗

但是如果我在Win 10机器上查看页面,我会看到:

此页面是安全的(有效的HTTPS)。 证书-有效且受信任 与此站点的连接正在使用由DigiCert SHA2安全服务器CA颁发的有效、受信任的服务器证书。 查看证书 连接-安全连接设置 使用TLS 1.2、带有P-256的ECDHE_RSA和AES_256_GCM对与此站点的连接进行加密和身份验证。 资源-安全地提供所有服务 此页面上的所有资源均安全提供

编辑2-问题已解决

问题解决了,

错误是服务器通过代理被锁定,不允许对Internet进行调用,这通过将从中下载的域图像列入白名单来解决


因此,代码和ASP.NET版本一直都是正确的。谢谢您的帮助。

好吧,这是因为您使用的是.Net 4.0。在.NET4.0中,默认的传输级别安全标准是TLS1.1。您的问题的解决方案是将应用程序升级到最新的.NET framework。例如,在4.6.1中,TLS 1.2是默认的加密标准

它在本地运行,因为您的系统上可能安装了.net 4.5。 您可以尝试这样做:

SecurityProtocolType.Tls11 | SecurityProtocolType.Tls
而不是

SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls
它会起作用的

以下是一个一般准则:

  • .NET 4.6:及以上版本:默认情况下支持TLS 1.2
  • .NET 4.5:支持TLS 1.2,但它不是默认协议
  • .NET 4.0。不支持TLS 1.2,但如果系统上安装了.NET 4.5(或更高版本),则仍可选择加入TLS 1.2 即使您的应用程序框架不支持它
  • .NET 3.5或更低版本。不支持TLS 1.2(*),并且没有解决方法。将应用程序升级到框架的最新版本

  • 参考:

    在Visual Studio中,目标框架设置为:.NET Framework 4.6.1。我需要升级服务器上的.NET版本吗?因为那是它不起作用的地方。但通过Visual studio它可以工作。请尝试将其更改为:SecurityProtocolType.Tls11 | SecurityProtocolType.Tls,并检查它是否在您的服务器上工作是的,升级服务器上的.net framework或更改代码服务器似乎已在4.6.1版上运行,但无论如何无法安装该版本,获取已安装此版本或更高版本的消息。已创建api终结点,以检查服务器上的版本。版本:4.0.30319.42000与相同错误:
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls