当我使用 SSL 和客户端证书从浏览器外 Silverlight 4 应用程序调用 IIS 7.5(在 Windows 7 64 位上)时,我遇到了一个问题,并显示消息“I/O 操作已由于线程退出或应用程序请求而中止。(0x800703e3)“。该请求确实到达了 IIS。这是来自失败请求跟踪的示例:
由于线程退出或应用程序请求,I/O 操作已中止。(0x800703e3) http://www.slipjig.org/IISError.gif
我正在使用浏览器 HTTP 堆栈,因为客户端 HTTP 堆栈不支持客户端证书。试图访问服务器的客户端代码是 Prism 模块加载器。如果我在浏览器外运行应用程序但忽略客户端证书,或者如果我在浏览器内运行应用程序但需要客户端证书,它工作正常。似乎是两者的结合导致了问题。
我尝试了以下方法来收集更多信息:
- 使用 Fiddler 查看失败的请求。如果 Fiddler 正在运行,它就可以工作(大概是因为 Fiddler 处理客户端证书的方式不同?);
- 创建了一个 .aspx Web 表单来提供模块 .xaps;
- 创建了一个 HTTPModule 来查看我是否可以在请求失败之前拦截它;
- 使用数据包嗅探器查看是否可以判断客户端证书是否正确发送。
除了我在跟踪文件中看到的信息之外,以上都没有给我提供太多有用的信息,尽管 Fiddler 的事情很有趣。
有任何想法吗?提前致谢!麦克风