现象描述:

C# .Net FrameWork3.5中异步HTTP请求时,由于安全协议的问题System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)方法抛出“基础连接已经关闭: 发送时发生错误”。

原因分析:

大多数情况下是由于客户端所设置的HTTP访问请求的安全协议不符合服务器端的安全协议要求。比如,NASA提供瓦片服务的http://worldwind25.arc.nasa.gov/wms?service=WMS&version=1.3.0&request=GetMap&layers=esat&styles=default&crs=CRS:84&bbox=0,-54,36,-18&width=512&height=512&format=image/jpeg&transparent=true&bgcolor=0x000000链接,服务器端要求TSL1.2安全协议,而我所使用的C# .Net FrameWork3.5中只支持Ssl3和Tls1.0两种协议,因此造成上述异常。

解决办法:

方法1、将开发环境Visual C#2008的 .Net FrameWork3.5框架升级为Visual C#2012的 .Net FrameWork4.5或更高版本,并将安全协议设置为:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

方法2、不升级开发框架。而是对操作系统和开发环境打补丁。步骤如下:

(1)我的开发环境为Windows7 64为操作系统+Visual C#2008的 .Net FrameWork3.5。去微软官网下载专用的补丁包。注意区分32位或64位。如下图所示。

(2)安装操作系统补丁包。直接安装可能无法进行,可按照如下的步骤安装:

  1)将安装包windows6.1-kb3154518-x64.msu拷贝到一指定位置,如D:\update\目录下。

  2)管理员身份打开命令提示符cmd.exe。

  3)切换到到指定的目录中,然后分别执行下面两句命令:

expand –F:* D:\update\windows6.1-kb3154518-x64.msu D:\update\
dism.exe /online /Add-Package /PackagePath:D:\update\Windows6.1-KB3154518-x64.cab

(3)向操作系统的注册表添加以下两个值(对于 64 位操作系统)。

在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]下面添加:SystemDefaultTlsVersions=dword:00000001
在[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]下面添加:SystemDefaultTlsVersions=dword:00000001

(4)在应用程序中添加以下两个类文件:SslProtocolsExtensions.cs和SecurityProtocolTypeExtensions.cs,内容如下。

//SslProtocolsExtensions.cs
using System;
namespace System.Security.Authentication
{
public static class SslProtocolsExtensions
{
public const SslProtocols Tls12 = (SslProtocols)0x00000C00;
public const SslProtocols Tls11 = (SslProtocols)0x00000300;
}
}
//SecurityProtocolTypeExtensions.cs
using System;
namespace System.Net
{
using System.Security.Authentication;
public static class SecurityProtocolTypeExtensions
{
public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12;
public const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11;
public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0;
}
}

(5)在应用程序的主函数main()中添加如下代码,以便HTTP请求中使用TSL1.2安全协议。

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolTypeExtensions.Tls12;

参考链接:

1、TLS 系统默认版本.NET Framework 3.5.1 Windows 7 SP1 和 Server 2008 R2 SP1 中包含的支持

2、.NET Framework

3、TLS 1.2 in .NET Framework 4.0

4、Windows8.1-KB2999226-x64安装提示 此更新不适用你的计算机

5、Http异步发送之HttpWebRequest的BeginGetResponse

6、C# HTTP请求 异步(async await)

两种解决方法下的源码:

1、HTTPRequestAsync-升级到VC#2012+NetFramework4.5:链接:https://pan.baidu.com/s/1iJ5Gdvm4RrUYa_WuGLD2Gw 提取码:6mxr

2、HTTPRequestAsync-VC#2008-安装补丁的代码:链接:https://pan.baidu.com/s/176PLZ0pHCq0KR9MbNk7--A 提取码:60dn 

C# .Net FrameWork3.5中异步HTTP请求时,由于安全协议的问题System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)方法抛出“基础连接已经关闭: 发送时发生错误”的解决办法的更多相关文章

  1. 【已解决】Https请求——基础连接已经关闭 发送时发生错误

    本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...

  2. .NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决

    前言: 前段时间在对接第三方接口的时候发生了一个非常奇葩的问题,就是使用 .NET Framework 4.6 HttpWebRequest进行网络请求的相关问题.背景,关于调用第三方的接口都是使用使 ...

  3. C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误。

    本人今天遇到的错误,C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误. 测试了很久,才发现,是安全协议问题,把安全协议加上就可以了

  4. 20190713_发布网站的时候报错:无法完成向远程代理 URL 发送请求 基础连接已经关闭 发送时发生错误

    环境介绍: Vs2017 IIS 7.5 服务器: windows 2008 R2 overflow上有一篇帖子讲了关于问题的解决办法: 链接: https://stackoverflow.com/q ...

  5. c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭

    在用httpWebRequest模拟请求的时候有时因为服务器等方面做了请求的限制, 在请求会出现基础连接已经关闭: 接收时发生意外错误的错误 一般原因是因为服务器不允许与 Internet 资源建立持 ...

  6. 请求被中止: 未能创建 SSL/TLS 安全通道,设置 TLSv1.2和TLSv1.1版本 .基础链接已经关闭,发送时发生错误

    WSO2 API访问的安全要求, 只能提供TLSv1.2和TLSv1.1版本,其它SSL版本协议因为存在较高安全漏洞问题会被disable. A 改成TLSv1.1或TLSv1.2,最好使用TLSv1 ...

  7. 远程桌面不能连接,提示awgina.dll取代错误的解决办法

    远程桌面不能连接,错误提示:您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件c:\windows\system32\awgina.dll取代,如下图所示: 原因: ...

  8. SVN“验证位置时发生错误”的解决办法

    验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javah ...

  9. Linux系统在启动过程中启动级别发生错误的解决办法

    一.系统启动级别一共有六个: 0:系统停机模式,系统不可以正常启动 1:单用户模式, root权限,用于系统的维护,禁止远程登陆 2:多用户模式,没有NFS网络支持 3:完整的多用户文本模式,有NFS ...

  10. push本地代码到github发生错误的解决办法

    有一天,我在github上编写好了README.md这个文件,接着发现本地有段代码忘记上传了,于是熟练的输入git add .   git commit -m "modify",以 ...

随机推荐

  1. Kubernetes 新型容器逃逸漏洞预警

    作者:米开朗基杨,KubeSphere 布道师,云原生重度感染者 2022 年 1 月 18 日,Linux 维护人员和供应商在 Linux 内核(5.1-rc1+)文件系统上下文功能的 legacy ...

  2. C240817C. 团队协作:二分答案+贪心

    C240817C. 团队协作 二分显然,但是被check难住了. 以为只能把运动员按速度分成两类,然后二分图找最大匹配,但显然做不动. 然后考场上就被卡住了--- 看了题解突然勾起了对一道题远古的记忆 ...

  3. 4.6 Linux解压.gz格式的文件(gunzip命令)

    gunzip 是一个使用广泛的解压缩命令,它用于解压被 gzip 压缩过的文件(扩展名为 .gz). 对于解压被 gzip 压缩过的文件,还可以使用 gzip 自己,即 gzip -d 压缩包. gu ...

  4. Codeforces 983 A-E

    题解 A 难度:黄 算法标签:数学.进制 题目翻译:给定进制 \(b\) 和分数 \(\frac{p}{q}\),求这个分数在 \(b\) 进制下是否是有限小数. 题目分析: 首先将分数化简(不用说了 ...

  5. P8392 BalticOI 2022 Day1 Uplifting Excursion

    P8392 BalticOI 2022 Day1 Uplifting Excursion 贪心加动规,好题,这两个甚至完全相反的东西可以融进一道题-- 思路 物品较少,贡献较小,体积较小,但总体积巨大 ...

  6. STATA数据统计软件学习记录

    STATA是一个数据统计软件,正如它的名字一样,STATA=statistic+data.STATA软件的功能和matlab类似,也可以用代码实现数据的统计与可视化.但几乎只能进行整行整列的数据处理, ...

  7. 鸿蒙NEXT开发案例:亲戚关系计算器

    [引言] 在快节奏的现代生活中,人们往往因为忙碌而忽略了与亲戚间的互动,特别是在春节期间,面对众多的长辈和晚辈时,很多人会感到困惑,不知道该如何正确地称呼每一位亲戚.针对这一问题,我们开发了一款基于鸿 ...

  8. spymemcached源码深入分析

    spymemcached深入分析 author:智深 version:0.7 日志:http://my.oschina.net/astute QQ:2548921609(技术交流) 一.简介 spym ...

  9. Java深度历险(六)——Java注解——(七)——Java反射与动态代理

    在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道.以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,Spring.Struts和 ...

  10. LNMP一键安装

    PHP环境快捷搭建工具: https://lnmp.org/ [安装] wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -O lnmp2.1.tar.gz ...