【关键字】
VSTFS2005 HTTP 404错误 程序集局部信任
【摘要】
VSTFS作为微软推出的重量级武器,不仅安装颇为麻烦,其安装配置也是十分麻烦。不仅如此,安装VSTFS之后还会给原来的服务器留下一些后遗症。
这些后遗症主要表现在两个方面,一是原来所有的虚拟服务器都不可以使用,二是安全控制策略发生了变化,使有些声明了权限要求的程序集不能正确调用,本文是作者解决以上问题的过程记录和采用的方法。如果采用本文描述的方法不能解决您的问题,请根据自己的实际情况来处理。
网站无法打开
公司最近决定使用VSTS作为软件过程管理工具,需要将原来的SourceSafe迁移到VSTS上,因为安装VSTS很多次了,比较有经验了,所以安装的过程很顺利,经过一些配置就可以使用了。但是测试人员不久就报告正在测试的系统突然不能使用了,从现象看是Web Services无法访问。
登录服务器,进入IIS管理器,打开以前配置好的Web Services,结果无一例外的提示HTTP 404错误,我以为仅仅是Web Services是这样,打开其他的纯网页的网站,结果依然提示HTTP 404错误。头一下就大了!!以此开始了痛苦的排错之旅。
-
尝试一:
-
新建一个虚拟目录。
-
在虚拟目录中用记事本建一个空白html文件
-
从IIS管理器中浏览该html文件
提示:http404错误。失败。
-
尝试二:
-
检查原来的所有虚拟目录,发现应用程序池全部被更改为TFSVSS。
-
删除原来的Web Services虚拟目录,重新创建虚拟目录,将应用程序池设为DefaultAppPool。
-
从IIS中浏览asmx文件,提示无法找到配置库。失败。
-
将应用程序池恢复为TFSVSS,提示HTTP404错误。失败。
-
尝试三:
-
对虚拟目录所在的物理文件夹授予everyone最高权限。
-
对c:\windows\temp授予everyone最高权限。
-
对C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files授予everyone最高权限。
提示:http404错误。失败。
-
尝试四
-
检查网站HTTP头,无异常现象。
-
授予aspnet用户,network service用户,terminal server user,IIS_WPG,IUSR_Computername最高权限。
-
将web services设置为允许匿名访问,匿名用户为超级用户
提示:http404错误。失败。
-
尝试五
-
新建应用程序池,将标识改为超级用户
-
将web services的应用程序池改为上述应用程序池
-
浏览web services
提示:http 404错误。失败。
以上所做的尝试都是根据HTTP 404错误常见的错误原因来排除的。但是最后的结果无一例外失败。在一筹莫展之际,调整了应用程序池,问题却意外的解决了。
以下是我解决本问题采用的步骤:
-
新建应用程序池。
-
将应用程序池的标识设置为IWAM_<Computername>,也就是IIS 进程启动帐户,而不是预定义帐号。
-
授予IWAM_<Computername>对虚拟目录的物理文件夹授予必要的权限。
-
将虚拟目录的应用程序池改为上述步骤创建的应用程序池。
-
重新浏览web services。
OK!问题解决!!
无法访问局部信任程序集
本以为上面的问题解决以后,我们的程序应该可以正常的使用了,然而开始使用Web Services的使用,报错提示App_code.dll无法访问局部信任的程序集。
在发布web站点的时候,的确有个选项可以使用该特性,但是发布的程序集也就是App_code.dll必须强名之后才能设置该特性,而我们的程序集在开发环境下都没有经过强名,而是发布之后才强名的,所以这一条路是行不通的。
尝试一:
-
使用.net configuation配置工具,将声明了权限的程序集加入到各个级别的代码组中,设置为FullTrust权限集。
-
重新启动服务器。
但是无法使用。失败。
尝试二:
-
打开caspol.exe
-
运行以下命令caspol –af <assemblyname>,将程序集加入到完全信任的程序集中
-
重新启动服务器。
但是无法使用。失败。
解决方法:
在web services站点的web.config文件中添加以下行就可以了。
<trust level="Full" />
但是本解决方法会存在安全漏洞。如果谁有好的解决方法,请告诉我。