当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中查找IIS站点ID?

如何解决《如何在C#中查找IIS站点ID?》经验,为你挑选了2个好方法。

我正在为我的Web服务编写安装程序类.在许多情况下,当我使用WMI时(例如,在创建虚拟目录时),我必须知道siteId为站点提供正确的metabasePath,例如:

metabasePath is of the form "IIS://///Root[/]"
for example "IIS://localhost/W3SVC/1/Root" 

如何根据站点名称(例如"默认网站")以编程方式在C#中查找?



1> Glennular..:

以下是如何通过名称获取它.您可以根据需要进行修改.

public int GetWebSiteId(string serverName, string websiteName)
{
  int result = -1;

  DirectoryEntry w3svc = new DirectoryEntry(
                      string.Format("IIS://{0}/w3svc", serverName));

  foreach (DirectoryEntry site in w3svc.Children)
  {
    if (site.Properties["ServerComment"] != null)
    {
      if (site.Properties["ServerComment"].Value != null)
      {
        if (string.Compare(site.Properties["ServerComment"].Value.ToString(), 
                             websiteName, false) == 0)
        {
            result = int.Parse(site.Name);
            break;
        }
      }
    }
  }

  return result;
}


在我的系统上,我不得不用以下内容更新上面的内容,以便编译"result = Convert.ToInt32(site.Name);"

2> Kev..:

您可以通过检查搜索的网站ServerComment属于数据库路径的子女财产IIS://Localhost/W3SVC有一个SchemaClassNameIIsWebServer.

以下代码演示了两种方法:

string siteToFind = "Default Web Site";

// The Linq way
using (DirectoryEntry w3svc1 = new DirectoryEntry("IIS://Localhost/W3SVC"))
{
    IEnumerable children = 
          w3svc1.Children.Cast();

    var sites = 
        (from de in children
         where
          de.SchemaClassName == "IIsWebServer" &&
          de.Properties["ServerComment"].Value.ToString() == siteToFind
         select de).ToList();
    if(sites.Count() > 0)
    {
        // Found matches...assuming ServerComment is unique:
        Console.WriteLine(sites[0].Name);
    }
}

// The old way
using (DirectoryEntry w3svc2 = new DirectoryEntry("IIS://Localhost/W3SVC"))
{

    foreach (DirectoryEntry de in w3svc2.Children)
    {
        if (de.SchemaClassName == "IIsWebServer" && 
            de.Properties["ServerComment"].Value.ToString() == siteToFind)
        {
            // Found match
            Console.WriteLine(de.Name);
        }
    }
}

这假定ServerComment已使用该属性(IIS MMC强制使用它)并且是唯一的.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有