C# .Net FrameWork3.5中异步HTTP请求时,由于安全协议的问题System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)方法抛出“基础连接已经关闭: 发送时发生错误”的解决办法
现象描述:
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 中包含的支持
3、TLS 1.2 in .NET Framework 4.0
4、Windows8.1-KB2999226-x64安装提示 此更新不适用你的计算机
5、Http异步发送之HttpWebRequest的BeginGetResponse
两种解决方法下的源码:
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)方法抛出“基础连接已经关闭: 发送时发生错误”的解决办法的更多相关文章
- 【已解决】Https请求——基础连接已经关闭 发送时发生错误
本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...
- .NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决
前言: 前段时间在对接第三方接口的时候发生了一个非常奇葩的问题,就是使用 .NET Framework 4.6 HttpWebRequest进行网络请求的相关问题.背景,关于调用第三方的接口都是使用使 ...
- C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误。
本人今天遇到的错误,C#使用HttpWebRequest 进行请求,提示 基础连接已经关闭: 发送时发生错误. 测试了很久,才发现,是安全协议问题,把安全协议加上就可以了
- 20190713_发布网站的时候报错:无法完成向远程代理 URL 发送请求 基础连接已经关闭 发送时发生错误
环境介绍: Vs2017 IIS 7.5 服务器: windows 2008 R2 overflow上有一篇帖子讲了关于问题的解决办法: 链接: https://stackoverflow.com/q ...
- c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭
在用httpWebRequest模拟请求的时候有时因为服务器等方面做了请求的限制, 在请求会出现基础连接已经关闭: 接收时发生意外错误的错误 一般原因是因为服务器不允许与 Internet 资源建立持 ...
- 请求被中止: 未能创建 SSL/TLS 安全通道,设置 TLSv1.2和TLSv1.1版本 .基础链接已经关闭,发送时发生错误
WSO2 API访问的安全要求, 只能提供TLSv1.2和TLSv1.1版本,其它SSL版本协议因为存在较高安全漏洞问题会被disable. A 改成TLSv1.1或TLSv1.2,最好使用TLSv1 ...
- 远程桌面不能连接,提示awgina.dll取代错误的解决办法
远程桌面不能连接,错误提示:您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件c:\windows\system32\awgina.dll取代,如下图所示: 原因: ...
- SVN“验证位置时发生错误”的解决办法
验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javah ...
- Linux系统在启动过程中启动级别发生错误的解决办法
一.系统启动级别一共有六个: 0:系统停机模式,系统不可以正常启动 1:单用户模式, root权限,用于系统的维护,禁止远程登陆 2:多用户模式,没有NFS网络支持 3:完整的多用户文本模式,有NFS ...
- push本地代码到github发生错误的解决办法
有一天,我在github上编写好了README.md这个文件,接着发现本地有段代码忘记上传了,于是熟练的输入git add . git commit -m "modify",以 ...
随机推荐
- PHP将整形数字转为Excel下标
1.背景 这两天在接到一个需求,需要导出一个班级所有学员的所有成绩,在最后excel表处理的时候发现导出的列超过了26列,后面会出现AA之类的下标,所以写了一个函数把数字整型转为Excel对应的下标. ...
- C语言刷题小知识点
力扣返回二维数组 int **spiralMatrix(int m, int n, struct ListNode *head, int *returnSize, int **returnColumn ...
- F450 APM2.8 自组无人机手记
由于是初次接触无人机,外加自组需要焊接,做了一些前期的心理建设.但是过程还是异常艰难.(不过,实际操作也就焊20个焊点左右,基本就组装起来了,操作并不复杂) 自组APM无人机是想学习Ardupilot ...
- 3-2 C++ string类型
目录 3.2.1 定义和初始化 3.2.2 对string的操作 (一)重要操作一览 (二)读写操作 cin/cout getline : 可读取整行 (三)获取大小 .size() (四)比较.赋值 ...
- UE4纯C++实现游戏快捷栏
要想创建一个游戏中的快捷栏我们往往通过以下几步来实现(目录导航): 1.创建UI:我们首先需要有在游戏视口中添加一个快捷栏UI界面,以供玩家看到自身的快捷栏. 2.物品读取:其次有了界面之后我们需要往 ...
- Codeforces 4 A-D
题面 A B C D 难度:红 橙 橙 黄 题解 A 题目大意: 判断一个正整数 \(w\) 能否表示成两个正偶数之和. 解题思路: 考虑分类讨论 \(w\). 对于 \(1\) 和 \(2\),显然 ...
- Bulk-Crap-Uninstaller:一个高效卸载,轻松管理你的应用程序的.Net开源工具
我们在工作中,经常需要安装大量的软件,随着应用程序的不断增多,管理这些软件变得非常困难. 下面介绍一款具备高效.简洁的特点,可以帮助我们快速卸载大量不需要的应用程序,让电脑管理变得更加轻松. 01 项 ...
- 解密prompt系列43. LLM Self Critics
前一章我们介绍了基于模型自我合成数据迭代,来提升LLM生成更合理的自我推理思考链路.但在模型持续提升的道路上,只提升Generator能力是不够的,需要同步提升Supervisor.Verifier的 ...
- 秒懂Redis
一.redis简介 Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库.缓存.消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 二.Re ...
- SharpZipLib打.tar.gz压缩包
.tar.gz是linux上常见的压缩格式,linux默认支持这种压缩格式,所以我们经常见到在linux系统上的.tar.gz包. 这里我们说一下怎么用SharpZipLib来打一个.tar.gz的压 ...