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

标签 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)
{
}

我得到这个异常:

{"Filename: redirection.config\r\nError: Cannot read configuration file\r\n\r\n":null}

这是什么意思?在它被抛出之前,有什么方法可以在 ServerManager 或我的 m 变量中预测它吗?

最佳答案

更新:现在看了你的评论后我可以完整地回答这个问题,问题是你的应用程序引用了错误的 Microsoft.Web.Administration.dll,看到错误告诉我你正在引用IIS Express 版本而不是“完整”IIS 版本 (7.0.0.0)。因此,请修改您的应用程序代码以添加对 c:\windows\system32\inetsrv\Microsoft.Web.Administration.dll 中的引用。

这是权限问题。

您需要确保以 Administrators 组或 SYSTEM 成员身份运行 Windows 服务。我的猜测是您可能将该服务作为本地服务或网络服务运行,而这些服务没有权限读取位于 %windows%\system32\inetsrv\config 中的配置文件。

其他信息:
Redirection.config 是 IIS 用来确定它是应该从正常路径 (%windir%\system32\inetsrv\config\applicationHost.config) 读取其配置还是应该在集中配置时从外部 UNC 文件共享读取它的文件用于许多服务器。这就是为什么这是第一个要解析的文件之一,因此您会收到该特定文件的拒绝访问错误。

关于预测,最好的办法是在 try/catch 中创建它并处理它。读取配置时可能会发生许多异常,例如权限(您可以通过确保可以读取(例如 File.OpenText())到 %windir%\system32\inetsrv 中的 Redirection.config、ApplicationHost.config 来预测这一点\config 但这是猜测,还有其他的,例如访问密码的加密 key 、无效的配置等)

关于c# - 尝试从 C# 服务查询 IIS 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802198/

相关文章:

asp.net - 服务器错误 - 由于以下错误 : 80070005 Access is denied,检索具有 CLSID 的组件的 COM 类工厂失败

c# - 在iis中启用svg解压

c# - 如何使泛型类成为另一个实例类中的属性?

c# - {string[0]} 是什么意思?

.net - 如何使用 TCP 将变量从 ASP.Net 发送到 IP 地址

.net - 在 ASP.NET 中创建大字符串时出现 OutOfMemoryException

c# - 部分类中同一源文件的可变范围

带有 json 字符串的 C# mongo 查询

c# - 如何在 C# 中截取 Winforms 控件/窗体的屏幕截图?

asp.net-mvc - asp.net mvc 中的动态子域