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 到服务器, 这个时候提交成功,这个 ...
随机推荐
- win7下的nginx小demo
一直大概知道nginx怎么玩,但是不看文档又蒙蔽.在这记录一下,以后好查看 下载tomcat,改index.jsp http://tomcat.apache.org/download-80.cgi t ...
- Thread suspend()挂起resume()恢复
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.Actio ...
- rsync同步数据
1. rsync 命令格式rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]HOST:DESTrsync [OPTION]... [USER ...
- VMware 密匙
11.0版本 1F04Z-6D111-7Z029-AV0Q4-3AEH8 亲测可用
- 【bzoj2793】[Poi2012]Vouchers 暴力
题目描述 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个.正整数中有m个数被标成了幸运数,问有哪些人取到了幸运数. 输入 第一行一个 ...
- 【bzoj4636】蒟蒻的数列 离散化+线段树
原文地址:http://www.cnblogs.com/GXZlegend/p/6801379.html 题目描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个 ...
- 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa
题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判 ...
- 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServletRequest ...
- vue-router中scrollBehavior的巧妙用法
问题:使用keep-alive标签后部分安卓机返回缓存页位置不精确问题 解决方案: <div id="app"> <keep-alive> <rout ...
- Sublime Text 2注册码
出处不详. ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855605 813A03DD 5E4AD9E6 6C0EE ...