Csharp/C#教程:如何在C#中查找IIS站点ID?分享


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

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

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

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

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

 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; } 

您可以通过检查属于具有SchemaClassName IIsWebServer的配置数据库路径IIS://Localhost/W3SVC子级的ServerComment属性来搜索站点。

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

 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强制使用它)并且是唯一的。

 public static ManagementObject GetWebServerSettingsByServerComment(string serverComment) { ManagementObject returnValue = null; ManagementScope iisScope = new ManagementScope(@"\localhostrootMicrosoftIISv2", new ConnectionOptions()); iisScope.Connect(); if (iisScope.IsConnected) { ObjectQuery settingQuery = new ObjectQuery(String.Format( "Select * from IIsWebServerSetting where ServerComment = '{0}'", serverComment)); ManagementObjectSearcher searcher = new ManagementObjectSearcher(iisScope, settingQuery); ManagementObjectCollection results = searcher.Get(); if (results.Count > 0) { foreach (ManagementObject manObj in results) { returnValue = manObj; if (returnValue != null) { break; } } } } return returnValue; } 

 private static string FindWebSiteByName(string serverName, string webSiteName) { DirectoryEntry w3svc = new DirectoryEntry("IIS://" + serverName + "/W3SVC"); foreach (DirectoryEntry site in w3svc.Children) { if (site.SchemaClassName == "IIsWebServer" && site.Properties["ServerComment"] != null && site.Properties["ServerComment"].Value != null && string.Equals(webSiteName, site.Properties["ServerComment"].Value.ToString(), StringComparison.OrdinalIgnoreCase)) { return site.Name; } } return null; } 

也许不是最好的方式,但这是一种方式:

  1. 循环遍历“IIS:// servername / service”下的所有站点
  2. 对于每个站点,检查您的案例中的名称是否为“默认网站”
  3. 如果为真则您拥有您的网站ID

示例:

上述就是C#学习教程:如何在C#中查找IIS站点ID?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 Dim oSite As IADsContainer Dim oService As IADsContainer Set oService = GetObject("IIS://localhost/W3SVC") For Each oSite In oService If IsNumeric(oSite.Name) Then If oSite.ServerComment = "Default Web Site" Then Debug.Print "Your id = " & oSite.Name End If End If Next 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1038869.html

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐