今天挺高兴,项目终于上线使用。只是上线之前遇到的问题折磨得人精疲力尽。。。不过总算解决了。。在这把问题说出来,希望对有需要的朋友提供些帮助~~
项目:dotnet项目,c#开发,主要功能是通过com组件访问远程接口。
运行环境:windows 2003 server + iis6.0 + .net 1.1
问题:com组件及系统在windows2000操作系统下都能正常使用,但迁移到win2003下,在程序调用组件时进程卡住了,有时会返回服务器出现意外情况的错误~
原因分析:首先,组件在其它操作系统下通过,说明组件应该没问题;注册com组件及dotnet项目引用方法均正确,而错误出现在调用组件这一步,而com组件的功能就是通过ip地址及端口访问远程接口,这里注意有一个远程网络连接的工作;上网搜索类似问题,大部分文章都是组件的权限问题,我也根据文章所写设置了组件,iis访问用户等的权限,都给予了最大权限,结果还是不行。。快崩溃了。。
解决方法:被这个问题折磨了几天之后,公司联系了微软客户支持,micro给了个方法,查看下iis6.0里的应用程序池的安全性权限。查看了下,在iis里的应用程序池属性中,“标识”标签下有个默认的安全性帐户“网络服务”即network service。network service 是 windows server 2003 中的内置帐户,其属于iis_wpg 组,iis_wpg 的成员具有适当的 ntfs 权限和必要的用户权限,按微软网站上的文章所说,network service 帐户具有充当 iis 6 工作进程的进程标识的充足权限,以及具有访问网络的权限。但不知道为什么,这里的network service权限不够,造成不能调用组件访问远程接口。解决的方法就是将iis_wpg帐户设置为读取与执行、列出文件夹目录、读取,而network service则需要完全控制权限。根据以上方法,我把network service赋于到administrator组 ^_|| ,重启iis,再运行程序,ok,正常调用组件了~~
因此如果有朋友再有碰到调用com组件不能用时,考虑一下应用程序池的权限~~
参考以下文章: http://www.microsoft.com/china/technet/community/columns/insider/iisi1203.mspx
新闻热点
疑难解答
图片精选