繁体   English   中英

如何使用Web管理C#在IIS 7中获取站点ID和站点状态

[英]How to Get Site ID and site status in IIS 7 using Web Administration C#

我需要使用Web管理在IIS7上获取站点ID和状态的帮助。 我有这个代码

 private string getSiteIdByName(string siteName)
    {
        DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC");
        foreach (DirectoryEntry e in root.Children)
        {
            if (e.SchemaClassName == "IIsWebServer")
            {
                if (e.Properties["ServerComment"].Value.ToString().Equals(siteName, StringComparison.OrdinalIgnoreCase))
                {
                    return e.Name;
                }
            }
        }
        return null;
    }



  private void showStatus(string siteId)
        {
            string result = "unknown";
            DirectoryEntry root = getDirectoryEntry("IIS://" + textServer.Text + "/W3SVC/" + siteId);
            PropertyValueCollection pvc;
            pvc = root.Properties["ServerState"];
            if (pvc.Value != null)
                result = (pvc.Value.Equals((int)ObjectState.Start) ? "Running" :
                          pvc.Value.Equals((int)ObjectState.Stop) ? "Stopped" :
                          pvc.Value.Equals((int)ObjectState.Pause) ? "Paused" :
                          pvc.Value.ToString());
            labelStatus.Text = result + " (" + pvc.Value + ")";
        }

但是它确实不能与我们的某些服务器配合使用。 有没有办法使用Web管理? 非常感谢您的协助。

谢谢!

进行一些研究后,您会发现您正在谈论的WebAdministration API仅仅是一个经过修饰的XML文件管理器,IIS竭尽全力向您隐藏。 此外,如果您“反映”多个Web服务器,则该API的性能往往令人发指。 它在后台使用DCOM,因此您可能实际上并不感兴趣的开销很大

过去在遇到这种情况时,我学会了绕过Web管理,只是使用LINQ to XML破解了XML文件。 一旦开始查看文件结构,它实际上并没有那么复杂。

这是一个标准的.config文件,位于C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config

如果要跨服务器访问它,请使用URI:

file://myserver/c$/windows/system32/inetsrv/config/applicationHost.config

请注意,这可能会出现问题,具体取决于您的应用程序所运行的帐户是否有权访问您正在使用的共享。

然后,只需使用LINQ to XML将其解析或使用Configuration名称空间中的类将其加载。

顺便说一下,此配置文件包含站点ID,虚拟目录路径,物理路径,应用程序池信息,以及您可能想了解的服务器上每个站点的所有信息。

祝好运。

我绝对不建议手动解析XML,因为如其他人所建议的那样,正确处理XML有很多复杂性,例如加密,默认值的继承以及许多其他可能会出错的错误。 这也意味着您无法访问运行时状态,执行此操作实际上非常简单:

using(ServerManager serverManager = new ServerManager()) {
    var state = serverManager.Sites[siteName].State;
}

请参阅: 在此处输入链接描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM