我们在前几天对xml web service的安全性提出了一些建议,大家可以通过以下地址访问:
构建安全的Xml Web Service系列之初探使用Soap头
构建安全的Xml Web Service系列之如何察看SoapMessage
我曾经在上面几篇文章中承诺过要写一些有关wse3.0的,可一直没有时间,自身对wse3.0的认识也是非常有限,所以一直没有实现诺言,很是愧疚,今天我就一个小问题作为wse的引子,希望大家继续关注和支持我。
第一次使用windows live writer,难免有排版和疏漏,见谅
今天发生了一件十分郁闷的事情,好多天前我用wse3证书验证方式架设了一个web service,另外又多此一举的加上了SSL,并在本地安装根证书和用于wse验证证书,在本地创建的客户端是一个web application,在vs 2005里面调试一直没有问题,好长时间了,我还以为一切顺利呢,给合作方也写了文档说明,发给了人家,结果今天对方报告说将网站发布在开发机上后,无法访问,错误为在指定存储位置找不到x.509证书,我在本机测试了下,你说郁闷不?在vs2005里面调试中运行的好好的页面,发布到IIS中就有这个问题,我将证书存储在CurrentUser的My下面了,我开始就怀疑network services 不能访问这个存储位置造成这个错误,但是为何在vs2005中调试就没有问题呢?细想,原来在vs2005的虚拟IIS是不是运行在network service账户下的,因为我每次调试,并没有看到w3wp进程启动,network services账户是不能访问当前用户存储下的证书的,这个是一个wse访问证书因为权限问题最常见的问题,而windows应用程序因为运行在当前账户上却可以访问。而network service能够访问本地计算机存储位置下的证书,于是我将证书重新导入到本地计算机-个人,然后将<x509 storeLocation="CurrentUser"更改为<x509 storeLocation="LocalMachine",重新打开网页,程序就可以了。
通过今天这个小小的问题,我总结出三条经验:
1)当我们遇到同样环境下,同一个程序一个能运行,一个不能运行,我们首先可以考虑的是权限的问题,我们程序运行的账户是否有权限访问某个资源。
2)vs2005中虚拟的IIS和IIS存在着些许的差异,不要图一时方便,用这个作为程序正常的标准,最好还是在iis里面调试和运行程序,可以少一些麻烦。
3 ) 当您的应用程序为运行在iis的应用程序的时候,如果不采用模拟,您的应用程序是不能访问位于当前用户下的证书的,包括用于SSL的证书,这个问题更典型,如果您在ie中能访问https的页面,在程序中却不能的话,那问题可能就出在这里。ie是运行在当前用户的,所以能访问当前用户下证书,而iis中的程序是运行在network services的,不能访问,您必须将证书存放在本地计算机才可以。