尝试从C#服务查询IIS时出现异常

时间:2013-04-04 03:52:11

标签: c# .net 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)
{
}

我得到了这个例外:

  

{“文件名:redirection.config \ r \ n错误:无法读取配置   文件\ r \ n \ r \ n“个:空}

这是什么意思?有没有办法在ServerManager或我的m变量之前预测它?

1 个答案:

答案 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,但这是猜测,还有其他如密码访问加密密钥,配置无效等等。)