ServicePointManager.ServerCertificateValidationCallback 冲突的解决
ServicePointManager是用于创建、 维护和删除的实例的静态类ServicePoint类。
当应用程序请求对 Internet 资源统一资源标识符 (URI) 的连接通过ServicePointManager对象,ServicePointManager返回ServicePoint对象,其中包含的主机和方案通过 URI 标识的连接信息。 如果没有现有ServicePoint方案,该主机以及对象ServicePointManager对象返回现有ServicePoint对象; 否则为ServicePointManager对象创建一个新ServicePoint对象。
.NET Framework 4.6 包括一个新的安全功能,将阻止不安全的密码和哈希算法的连接。 默认情况下,使用 TLS/SSL 通过例如 HttpClient、 HttpWebRequest、 FTPClient、 SmtpClient、 SslStream 等的 Api 和面向.NET Framework 4.6 的应用程序获得更安全行为。
开发人员可能想要选择退出此行为以便保持其现有 SSL3 服务或 TLS 带 RC4 服务与互操作性。 This article说明如何修改你的代码,以便禁用新的行为。
当我们要使用servicepointmanager.servercertificateValidationCallback验证我们请求的证书时,如果请求是一个https请求,并且有多个线程并发请求的话,由于servicepointmanager是一个全局变量,只设置一次那么整个相关的https的请求都会进入这个回调函数中,并且不能单独设置,这个时候你就要注意使用方法了,如果你想设置多个回调来分别区分的话,由于多线程的存在,会使得你的回调乱串,即回调不知道使用了那个,有兴趣的朋友可以开多线程测试一下。
基于以上的原因,其实在使用这个类时,最好的方法是:由于serverpointmanger是一个全局变量,那个全局最好就只设置一次回调方法,所有的请求都到这里去区分,这里怎么区分请求是有技巧的,
public delegate bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
回调方法如上,我们可以看这个函数的参数,总共三个,其中有两个是无法更改,只有第一个参数,是一个object类型,那我们就利用这个参数,让我们的请求从这个参数中把参数带过来一个标志或其他参数,由于是https请求,所以一般我们使用的是HttpWebRequest这个类来请求路径,我们可以在这个类中添加Headers或者cookies参数,并且是会传到上面的回调的sender里的。
HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader streamReader = null; var encoding = Encoding.UTF8; request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "post";
request.ContentType = "text/xml";
request.Headers.Add("charset:utf-8");
request.Timeout = * ; // 15 秒 request.Headers.Set(HttpRequestHeader.UserAgent, "login");
使用方案:
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
bool IsLogin = false;
HttpWebRequest httpWebrequest = (HttpWebRequest)sender;
string domain = httpWebrequest.Address.Host;
}
通过以上方案即可解决多线程调用证书验证,并带参数区分的问题。
ServicePointManager.ServerCertificateValidationCallback 冲突的解决的更多相关文章
- git 本地库推送远程库 版本冲突的解决方法
参考: http://blog.csdn.net/shiren1118/article/details/7761203 github上的版本和本地版本冲突的解决方法 $ git push XXX ma ...
- bootstrap与jqueryui按钮冲突的解决
bootstrap与jqueryui按钮冲突的解决 (2013-10-15 14:09:36)转载▼ 标签: 情感 分类: jQuery 参考: http://getbootstrap.com/jav ...
- js冲突怎么解决
a.最容易出现的就是js的命名冲突①.变量名冲突变量有全局变量和局部变量当全局变量变量和局部变量名称一致时,就会js冲突,由于变量传递数值或地址不同就会产生JavaScript错误,甚至死循环.②.方 ...
- android中控件公用产生的冲突的解决办法
1.ViewPager嵌套HorizontalScrollView滑动冲突的解决办法,重写ViewPager public class ZdyViewPage extends ViewPager { ...
- jQuery的AJAX方法简介及与其他文件$符号冲突的解决办法
一.重要的jQuery AJAX方法简介 $.load(url) 从服务器载入数据 $.get(url,callback) 从服务器请求数据,并执行回调函数 $.post(url,data,callb ...
- svn冲突文件解决方法
svn冲突文件解决方法 工具/原料 svn客户端 方法/步骤 1 通过SVN客户端更新需要的文件,如果出现有感叹号的文件,找到出现感叹号的文件. 2 选择感叹号文件,即冲突文件,单击鼠标右键对冲突文件 ...
- git冲突时解决方法
在多人协作中,使用git时有冲突是必然的,当git pull 下来代码的时候会出现 <<<<<<< HEAD这些东西,我也没有详细了解过这些,只是知道删除一 ...
- git与eclipse集成之代码冲突与解决
1.1. 代码冲突与解决 目前使用git管理代码,产生冲突的原因,主要是当多个人向特性分支提交代码时,如果两个人修改了同一个文件,第二个人提交代码时就可能会冲突. 举例说明: 创建远程特性分支.远程个 ...
- SVN冲突以及解决办法
1.冲突原因: 假设 A.B 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件,A 用户在修改完成之后提交 kingtuns.txt 到服务器, 这个时候提交成功,这个 ...
随机推荐
- vue vscode 开始
E:\Html\4 Vue版>npm config set registry https://registry.npm.taobao.org E:\Html\4 Vue版>npm i &g ...
- table不让td中文字溢出操作方法
table不让td中文字溢出操作方法 table{ width:100px; table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用. */ } t ...
- SQLAlchemy技术文档(中文版)(中)
10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...
- AtCoder keyence2019 E Connecting Cities
keyence2019_e $N$ 个节点的无向图 $G$,节点 $i,j$ 之间的边权值为 $|i - j| \times D + A_i + A_j$ . 求最小生成树(Minimum Spann ...
- 【距离GDOI:130天】 AC自动机ing
弄完后缀数组,终于能安心来复习AC自动机了..其实当时学的很不好,非常不好..模版都是有问题的...今天花了第一节晚修和一节自习算是把AC自动机的基础弄好了...切掉3道基础题,然后就被某道坑爹题坑掉 ...
- jquery字数限制超出显示...,原有内容在title中显示
为标签添加class = sliceFont:添加data-num属性为要显示的字数,截取后会在title中显示原有字符串: $('.sliceFont').each(function(index, ...
- a标签打电话
<a href="tel:0147-88469258"></a> <a href="mailto:bd@pangxiekeji.com&qu ...
- SHTSC2017酱油记~~~
一转眼,SHTSC2017就结束了呢... [前记] noip2016的时候,day2由于各种奇奇怪怪的原因,于是策略上犯错误,然后直接滚粗... 作为一个SHTSC2016年就莫名其妙当上B队队长的 ...
- Android四大组件:Service
前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...
- 培训补坑(day5:最小生成树+负环判断+差分约束)
补坑补坑((╯‵□′)╯︵┻━┻) 内容真的多... 一个一个来吧. 首先是最小生成树. 先讲一下生成树的定义 生成树就是在一张图上选取一些边,使得整个图上所有的点都连通. 那么我们要求的最小生成树有 ...