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 冲突的解决的更多相关文章

  1. git 本地库推送远程库 版本冲突的解决方法

    参考: http://blog.csdn.net/shiren1118/article/details/7761203 github上的版本和本地版本冲突的解决方法 $ git push XXX ma ...

  2. bootstrap与jqueryui按钮冲突的解决

    bootstrap与jqueryui按钮冲突的解决 (2013-10-15 14:09:36)转载▼ 标签: 情感 分类: jQuery 参考: http://getbootstrap.com/jav ...

  3. js冲突怎么解决

    a.最容易出现的就是js的命名冲突①.变量名冲突变量有全局变量和局部变量当全局变量变量和局部变量名称一致时,就会js冲突,由于变量传递数值或地址不同就会产生JavaScript错误,甚至死循环.②.方 ...

  4. android中控件公用产生的冲突的解决办法

    1.ViewPager嵌套HorizontalScrollView滑动冲突的解决办法,重写ViewPager public class ZdyViewPage extends ViewPager { ...

  5. jQuery的AJAX方法简介及与其他文件$符号冲突的解决办法

    一.重要的jQuery AJAX方法简介 $.load(url) 从服务器载入数据 $.get(url,callback) 从服务器请求数据,并执行回调函数 $.post(url,data,callb ...

  6. svn冲突文件解决方法

    svn冲突文件解决方法 工具/原料 svn客户端 方法/步骤 1 通过SVN客户端更新需要的文件,如果出现有感叹号的文件,找到出现感叹号的文件. 2 选择感叹号文件,即冲突文件,单击鼠标右键对冲突文件 ...

  7. git冲突时解决方法

    在多人协作中,使用git时有冲突是必然的,当git pull 下来代码的时候会出现  <<<<<<< HEAD这些东西,我也没有详细了解过这些,只是知道删除一 ...

  8. git与eclipse集成之代码冲突与解决

    1.1. 代码冲突与解决 目前使用git管理代码,产生冲突的原因,主要是当多个人向特性分支提交代码时,如果两个人修改了同一个文件,第二个人提交代码时就可能会冲突. 举例说明: 创建远程特性分支.远程个 ...

  9. SVN冲突以及解决办法

    1.冲突原因: 假设 A.B 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件,A 用户在修改完成之后提交 kingtuns.txt 到服务器, 这个时候提交成功,这个 ...

随机推荐

  1. android ListView与EditText共存错位

    在一个ListView中,如果里面有EditText会很麻烦,因为修改EditText里面的数据会发生错位现象. 这时候,需要在适配器BaseAdapter的getView中设置setTag(),将p ...

  2. GCD 开发详情

    目录 一.简介 二.dispatch Queue - 队列 三.dispatch Groups - 组 四.dispatch Semaphores - 信号量 五.dispatch Barriers ...

  3. Android React Native组件的生命周期及回调函数

    熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开 ...

  4. Linux系统——提高编译速度的方法

    编译优化: 基本原则就是“以空间换时间” tmpfs: 解决IO瓶颈,充分利用本机内存资源 make -j: 充分利用本机计算资源 distcc: 利用多台计算机资源 ccache: 减少重复编译相同 ...

  5. java算法(一) 直接选择排序

    一.基本概念 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(注:要把最大最小的元素和起始的元素交换), 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以 ...

  6. 插件安装:包管理器——Package Control

    首先,按CTRL+`,打开控制台   粘贴下面的代码,之后回车 如果是sublime3 ? 1 import urllib.request,os,hashlib; h = '7183a2d3e96f1 ...

  7. 解决PKIX path building failed

    起因 上周在生产环境部署时,把安全证书加到k8s-ingress中时发现报该错误 解决 找网上解决方案,因为这种问题相对比较少见,也没百度,直接谷歌,找到解决方案如下:https://stackove ...

  8. root权限

    点击左侧终端标 步骤阅读 2 出现命令提示符 3 首先输入:sudo passwd root(设置root密码) 4 输入当前系统的账户密码(账户:admin-pc的密码) 5 输入新的root密码, ...

  9. [转载]EasyUI中数据表格DataGrid添加排序功能

    我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前 ...

  10. ViewPager实现选项卡功能

    1.ViewPager实现Tab 目录结构: