在我的ASP.NET Web应用程序中,我想查找创建时在IIS中分配给它的名称,该名称对服务器唯一。我不关心Web站点的域名,而是关心在IIS中分配给站点的实际名称。
我需要能够可靠地在IIS6和7上执行此操作。
需要明确的是,我指的是在IIS中分配的名称,而不是域名,也不是虚拟目录路径。
我需要能够可靠地在IIS6和7上执行此操作。
需要明确的是,我指的是在IIS中分配的名称,而不是域名,也不是虚拟目录路径。
如Carlos和其他人在评论中提到的,最好使用HostingEnvironment.SiteName
,因为根据文档,GetSiteName
不应该被用户使用。
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()
。而应该使用Web.Hosting.HostingEnvironment.SiteName
。因此被投下了反对票。 - Dan Atkinson这里有一个相关的帖子,可以获取网站的Id。
以下是可能适用于您的代码:
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");
}
}
这里是原始帖子的链接。
我不确定它是否适用于IIS7,但如果您安装了IIS7的IIS6兼容性组件,则应该可以工作。
通过Microsoft.Web.Administration.SiteCollection进行迭代,使用Site对象获取对你的网站的引用,并读取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();
}
连接远程服务器时,首先需要执行ServerManager.OpenRemote("serverName")。
基本上就是像这样做
using (ServerManager srvMgr = ServerManager.OpenRemote("serverName"))
{
}
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;
}