从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系统的读写访问权限的ServerManager ( Microsoft.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; }