一桩由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单子以后,简单重现了下,基本上定位到是查询操作中的问题, ...
随机推荐
- CIC仿真
在调用CIC时发现的,明确告诉调用那些库. CIC的设置窗口. 该CIC滤波器有两个输入一个输出.与下面的相比,同样要输出两路信号,但输出速率要高. 修改成以下的设置 设置一个接口,两个通道. 该设置 ...
- Git 同步远程仓库
在你经常使用的命令当中有一个git branch –a 用来查看所有的分支,包括本地和远程的.但是时间长了你会发现有些分支在远程其实早就被删除了,但是在你本地依然可以看见这些被删除的分支. 同步远程分 ...
- (最小生成树)QS Network -- ZOJ --1586
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 http://acm.hust.edu.cn/vjudge/ ...
- Java火焰图在Netflix的实践
转自 http://www.infoq.com/cn/news/2015/08/java-flamegraph 亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要 ...
- HDU1501 Zipper(DFS) 2016-07-24 15:04 65人阅读 评论(0) 收藏
Zipper Problem Description Given three strings, you are to determine whether the third string can be ...
- The Real Meaning of Peace
The Real Meaning of Peace There once was a king who offered a prize to the artist who would paint th ...
- [翻译] Using Custom Functions in a Report 在报表中使用自己义函数
Using Custom Functions in a Report 在报表中使用自己义函数 FastReport has a large number of built-in standard ...
- Delphi事件的广播 转
http://blog.sina.com.cn/s/blog_44fa172f0102wgs2.html 原文地址:Delphi事件的广播 转作者:MondaySoftware 明天就是五一节了,辛苦 ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- 手动处理TFS数据仓库服务和分析服务
当您需要报告中最新的数据时,当发生错误时,或者在解决了模式冲突之后,您可以手动处理Team Foundation Server(TFS)关系数据库(TFSHStor)或SQLServer Analys ...