c00*_*0fd 3 .net c# iis service iis-7
我从使用C#编写的Windows服务调用以下代码:
try
{
ServerManager m = new ServerManager();
if(m != null)
{
SiteCollection sites = m.Sites; //I get exception here
}
}
catch (Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
{"文件名:redirection.config\r \n错误:无法读取配置文件\ r \n\r \n":null}
那是什么意思?是否有任何方法可以m在它被抛出之前在ServerManager或我的变量中预测它?
更新:现在查看您的评论后我可以完全回答这个问题,问题是您的应用程序引用了错误的Microsoft.Web.Administration.dll,看到错误告诉我您引用的是IIS Express版本而不是"完整" IIS版本(7.0.0.0).因此,请修改您的应用程序代码,以添加对c:\ windows\system32\inetsrv\Microsoft.Web.Administration.dll中的引用.
这是权限问题.
您需要确保将Windows服务作为Administrators组或SYSTEM的成员身份运行.我的猜测是你可能正在运行本地服务或网络服务这些服务,而且他们没有权限读取位于%windows%\ system32\inetsrv\config中的配置文件.
其他信息:
Redirection.config是IIS用于确定是否应该从正常路径(%windir%\ system32\inetsrv\config\applicationHost.config)读取其配置的文件,或者应该从外部UNC文件共享中读取它当集中配置用于许多服务器时.这就是为什么这是要解析的第一个文件之一,因此您获得该特定文件的访问被拒绝错误.
关于预测,最好的办法是在try/catch中创建它并处理它.在读取配置时可能会发生许多异常,例如权限(您可以通过确保可以读取(例如File.OpenText())到%direction.config,%windir%\ system32\inetsrv中的ApplicationHost.config来预测这一点.\config,但这是猜测,还有其他如访问加密密钥,密码,无效配置等,等等.