从ASP.NET网站获取IIS站点名称

在我的ASP.NET Web应用程序中,我想查找在IIS中创build的名称,这是服务器独有的。 我不感兴趣的网站的域名,但实际的名称给IIS中的网站。

我需要能够可靠地为IIS6和7做到这一点。

要清楚我在谈论IIS中给定的名称,而不是域名,而不是虚拟目录path。

来自IIS的价值我想从C#中读取http://img252.imageshack.us/img252/6621/capturedz.png

System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(); 

这是检索网站ID的相关post 。

这里有些代码可能适合你:

 using System.DirectoryServices; using System; public class IISAdmin { public static void GetWebsiteID(string websiteName) { DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc"); foreach(DirectoryEntry de in w3svc.Children) { if(de.SchemaClassName == "IIsWebServer" && de.Properties["ServerComment"][0].ToString() == websiteName) { Console.Write(de.Name); } } } public static void Main() { GetWebsiteID("Default Web Site"); } 

}

这是原始post的链接。

我不确定它是否能在IIS7上工作,但是如果你安装IIS7的IIS6兼容性组件,它应该可以工作。

您正在寻找提供对IIS 7.0configuration系统的读写访问权限的ServerManagerMicrosoft.Web.Administration )。

通过Microsoft.Web.Administration.SiteCollection循环访问,使用Site Object获取对您的网站的引用,并阅读Name属性的值。

 // Snippet using (ServerManager serverManager = new ServerManager()) { var sites = serverManager.Sites; foreach (Site site in sites) { Console.WriteLine(site.Name); // This will return the WebSite name } 

您也可以使用LINQ查询ServerManager.Sites集合(请参阅下面的示例)

 // Start all stopped WebSites using the power of Linq :) var sites = (from site in serverManager.Sites where site.State == ObjectState.Stopped orderby site.Name select site); foreach (Site site in sites) { site.Start(); } 

注意 :Microsoft.Web.Administration 仅适用IIS7

对于IIS6,您可以同时使用ADSI和WMI来执行此操作,但build议您使用比ADSI更快的WMI。 如果使用WMI,请查看WMI Code Creator 1.0 (由Microsoft免费开发)。 它会为你生成代码。

HTH

由于@ belugabob和@CarlosAg已经提到,我宁愿使用System.Web.Hosting.HostingEnvironment.SiteName而不是System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()因为IApplicationHost.GetSiteName方法不打算直接调用! ( msdn )

所以你最好使用HostingEnvironment.SiteName属性! ( msdn )

我认为这应该是关于文件的正确答案;)

连接到远程服务器时,您需要首先执行ServerManager.OpenRemote(“serverName”)。

基本上做这样的事情

  using (ServerManager srvMgr = ServerManager.OpenRemote("serverName")) { } 

看到msdn的帮助

你可以使用下面的代码

 private string WebsiteName() { string websiteName = string.Empty; string AppPath = string.Empty; AppPath = Context.Request.ServerVariables["INSTANCE_META_PATH"]; AppPath = AppPath.Replace("/LM/", "IIS://localhost/"); DirectoryEntry root = new DirectoryEntry(AppPath); websiteName = (string)root.Properties["ServerComment"].Value; return websiteName; }