一桩由X509Certificate2引发的血案
A process serving application pool '. The data field contains the error number.
在某次网站更新后,发现wcf服务不可用了,连续调用5次后就出现503错误了,检查服务器上的日志和事件,发现上面的警告,网上查了下,有各种解决方法,可是都不管用,于是逐行代码输出日志看看问题出在哪里,结果发现是X509Certificate2这个类引发的异常。
| 1 | X509Certificate2(String, SecureString) |
新实例初始化 X509Certificate2 类使用的证书文件名称和密码。 |
| 2 | X509Certificate2(String, SecureString, X509KeyStorageFlags) |
新实例初始化 X509Certificate2 类使用的证书文件名称、 密码和密钥存储标记。 |
在msdn上可以看到这个类有这么两个构造函数,区别就在
X509KeyStorageFlags
这是它的枚举值:
| 成员名称 | 说明 | |
|---|---|---|
| DefaultKeySet |
使用默认的密钥集。用户密钥集通常为默认值。 |
|
| Exportable |
导入的密钥被标记为可导出。 |
|
| MachineKeySet |
私钥存储在本地计算机存储区而不是当前用户存储区。 |
|
| PersistKeySet |
导入证书时会保存与 PFX 文件关联的密钥。 |
|
| UserKeySet |
私钥存储在当前用户存储区而不是本地计算机存储区。既使证书指定密钥应存储在本地计算机存储区,私钥也会存储到当前用户存储区。 |
|
| UserProtected |
通过对话框或其他方法,通知用户密钥被访问。使用的加密服务提供程序 (CSP) 定义确切的行为。 |
可以看到默认的枚举是使用DefaultKeySet,当使用第一个构造函数的时候就是使用的用户存储区的证书,当服务部署在IIS上的时候,如果没有导入证书,调用服务的时候会没有响应,注意是没有响应,而且程序不报任何错误,在系统事件里可以看到上面的警告信息,连续调用5次失败后,程序的应用程序池被自动关闭,这个是在应用程序池中的默认设置。将代码修改使用第二种构造函数后问题解决。
这个类的构造函数奇怪之处在于第一个参数都已经提供了证书的地址,第二个参数是证书密码,如果调用第一个构造函数竟然还要去用户存储区中读取证书。
更奇怪的是部署在Windows服务中使用第一个构造函数是没有问题的,只有发布到IIS需要使用第二个构造函数。
一桩由X509Certificate2引发的血案的更多相关文章
- [WCF]缺少一行代码引发的血案
这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...
- dubbox微服务实例及引发的“血案”
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ...
- Integer.parseInt 引发的血案
Integer.parseInt 处理一个空字符串, 结果出错了, 程序没有注意到,搞了很久, 引发了血案啊!! 最后,终于 观察到了, 最后的部分: Caused by: java.lang.NoC ...
- Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- 转:一个Sqrt函数引发的血案
转自:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html 源码下载地址:http://diducoder.com/sotr ...
- 一个Sqrt函数引发的血案(转)
作者: 码农1946 来源: 博客园 发布时间: 2013-10-09 11:37 阅读: 4556 次 推荐: 41 原文链接 [收藏] 好吧,我承认我标题党了,不过既然你来了, ...
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs()
一个字母引发的血案 明天开始放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码: //省略部分代码... Long fileId= (Long) data.get( ...
- form表单提交引发的血案
最近,公司某条产品线上的一个功能出了问题:点击查询的时候,该页面在IE上直接卡死,chrome上会卡顿一段时间候提交表单进行查询.拿到这个bug单子以后,简单重现了下,基本上定位到是查询操作中的问题, ...
随机推荐
- 保留注释换行的python模块configparser
python语言用来解析配置文件的模块是ConfigParser,python3中是configparser模块,我在使用中发现write方法在将配置项重新写入文 件时,配置文件中的空行和注释行都会被 ...
- C++互斥器:Mutex
互斥器的功能是,使多个线程和谐工作.同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程 ...
- Android-自定义ListView下拉刷新与上拉加载
效果图: 第一步:编写需要在ListView中增加头加载的布局文件,与底部加载的布局文件: 头布局文件: <?xml version="1.0" encoding=" ...
- sklearn使用小记GridSearchCV
def test_grid_search(): from sklearn import datasets,svm iris = datasets.load_iris() parameters = {' ...
- java poi 获取单元格值时间
完整帮助类:JAVA poi 帮助类 /* * poi特殊日期格式:数字格式化成-yyyy年MM月dd日,格式 * */ private static ArrayList<String> ...
- Xamarin.Forms第三方XAML预览工具-LiveXAML简单体验
截至目前,Xamarin官方的Xaml Previewer工具仍然处于测试阶段,使用中也发现了各种不便,例如各种莫名其妙的渲染失败,或者提示需要编译项目才能渲染等等,复杂项目基本不可用, 完全没有体现 ...
- wpf(使用定时器)使用定时器操作UI界面
在项目实践中,我们 可能会遇到需要将一些控件上显示的内容只显示一段时间过后清空. 下面我们来实现这种操作: 首先需要注意的是:在wpf中涉及到界面操作的话,一定要使用定时器DispatcherTime ...
- 廖雪峰Python学习笔记——使用元类
元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...
- 914. X of a Kind in a Deck of Cards
In a deck of cards, each card has an integer written on it. Return true if and only if you can choos ...
- 639. Decode Ways II
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...