一桩由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单子以后,简单重现了下,基本上定位到是查询操作中的问题, ...
随机推荐
- MFC框架仿真<二>
- Get同步请求
//同步get请求 // NSURL: iOS 中的URL存储类,可存储网址或者文件路径 NSString *urlString = @"http://api.map. ...
- (最小生成树)Jungle Roads -- HDU --1301
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1301 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- Delphi XE6 Android拨号函数
http://blog.sina.com.cn/s/blog_44fa172f0101rpex.html Delphi XE6 Android拨号函数 (2014-05-07 17:48:51) 转载 ...
- 导出excle错误
导出excel时出现下面的错误: 类型“GridView”的控件“SimpleForm1_ContentPanel2_GVD_List”必须放在具有 runat=server 的窗体标记内. 可以在对 ...
- MySQL使用 IN 查询取出数据排序问题(与in排序相同、不排序)
MySQL使用 IN 查询取出数据排序问题(与in排序相同) 今天在项目中遇到一个问题,就是做一个最近浏览的功能,但是功能做出来了,取出数据时候要用到类似这么一条带in查询的sql语句, select ...
- Newtonsoft.Json日常用法
原文链接:https://www.cnblogs.com/ZengJiaLin/p/9578794.html
- TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件
1.composer安装: composer require phpoffice/phpspreadsheet 2.点击导出按钮,触发控制器里面的方法 wdjzdc() 3. 在控制中引入 use P ...
- Google Guava 类库简介
Guava 是一个 Google开发的 基于java的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency librar ...
- QT for Android记录
1.<Qt on Android核心编程> blog: http://blog.csdn.net/foruok/article/details/38510195