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

在我的ASP.NET Web应用程序中,我想查找在IIS中创建的名称,该名称是服务器唯一的。 我对网站的域名不感兴趣,但对IIS中赋予站点的实际名称不感兴趣。

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

需要明确的是,我说的是IIS中的给定名称,不是域名,也不是虚拟目录路径。

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

Søren Spelling Lund asked 2020-01-14T06:59:21Z
6个解决方案
57 votes
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
Mehdi Golchin answered 2020-01-14T06:59:36Z
18 votes

正如@belugabob和@CarlosAg已经提到的那样,我宁愿使用System.Web.Hosting.HostingEnvironment.SiteName而不是System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(),因为IApplicationHost.GetSiteName方法不能直接调用! (msdn)

因此,最好使用HostingEnvironment.SiteName属性! (msdn)

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

khlr answered 2020-01-14T07:00:06Z
11 votes

这是检索站点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兼容性组件,则它应该可以使用。

Chuck Conway answered 2020-01-14T07:00:43Z
9 votes

您正在寻找ServerManager(Microsoft.Web.Administration),它提供对IIS 7.0配置系统的读写访问。

通过Microsoft.Web.Administration.SiteCollection进行迭代,使用“网站对象”获取对您的网站的引用,并读取“名称”属性的值。

// 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来执行此操作,但是我建议您选择比ADSI更快的WMI。 如果使用WMI,请查看WMI Code Creator 1.0(免费/由Microsoft开发)。 它将为您生成代码。

高温超导

ntze answered 2020-01-14T07:01:26Z
0 votes

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

基本上做这样的事情

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

            }

请参阅msdn帮助

pungggi answered 2020-01-14T07:01:54Z
0 votes

您可以使用以下代码

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;
}
Sachin Bhale answered 2020-01-14T07:02:14Z
translate from https://stackoverflow.com:/questions/1654797/get-iis-site-name-from-for-an-asp-net-website