如何使用 Microsoft.Web.Administrator 通过端口号获取站点

How can I use Microsoft.Web.Administrator to get sites by Port number

我有一个应用程序可以远程 stops/restarts 应用程序 pools/sites 并检查应用程序 pools/sites 的状态。目前,这些是使用 DirectoryEntry class 例如

管理的
private DirectoryEntry FindSite(int nPort)
{
    using (var sites = new DirectoryEntry(string.Format(m_adSitesPath,m_RemoteServerName)))
    {
        sites.RefreshCache();

        foreach (DirectoryEntry de in sites.Children)
        {
            de.RefreshCache();
            if (de.SchemaClassName == "IIsWebServer")
            {
                string port = GetNullableDirMultiValuePart(de, "ServerBindings", 0, 1);
                if (nPort == int.Parse(port))
                {
                    return de;
                }
            }
        }
    }
    return null;
}

此方法在任何服务器 运行 IIS 8 上均失败,在另一个问题上有人建议我应该开始考虑使用 Microsoft.Web.Administrator classes。有人可以给我指出正确的方向,以便我使用 Microsoft.Web.Administrator 命名空间按端口获取站点列表吗?

示例代码如下,

private List<Site> FindSite(int nPort)
{
    var result = new List<Site>();
    var server = new ServerManager();
    foreach (Site site in server.Sites)
    {
        foreach (Binding binding in site.Bindings)
        {
            if (binding.EndPoint.Port == port)
            {
                result.Add(site);
                break;
            }
        }
    }

    return result;
}

其中 MWA 定义强类型(SiteBinding 等)而不是 DirectoryEntry,后者不对应于有意义的类型。

您可以在此处找到 class 参考,

https://msdn.microsoft.com/en-us/library/microsoft.web.administration(v=vs.90).aspx