我从使用C#编写的Windows服务调用以下代码:
try
{
ServerManager m = new ServerManager();
if(m != null)
{
SiteCollection sites = m.Sites; //I get exception here
}
}
catch (Exception ex)
{
}
我得到了这个例外:
{“文件名:redirection.config \ r \ n错误:无法读取配置 文件\ r \ n \ r \ n“个:空}
这是什么意思?有没有办法在ServerManager或我的m
变量之前预测它?
答案 0 :(得分:9)
更新:现在查看您的评论后我可以完全回答这个问题,问题是您的应用程序引用了错误的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())到Redirection.config,%windir%\ system32 \ inetsrv中的ApplicationHost.config来预测这一点。 \ config,但这是猜测,还有其他如密码访问加密密钥,配置无效等等。)