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

Sør*_*und 52 c# asp.net iis

在我的ASP.NET Web应用程序中,我想查找在IIS中创建它时给出的名称,这是服务器所独有的.我对网站的域名不感兴趣,而是对IIS中网站的实际名称感兴趣.

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

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

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

Meh*_*hin 57

System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
Run Code Online (Sandbox Code Playgroud)

  • 不是直接有一个HostingEnvironment.SiteName吗?此外,您还可以阅读ServerVariable"InstanceName",它也可以为您提供. (15认同)
  • 这总是为我返回"默认网站" - 以及"System.Web.Hosting.HostingEnvironment"状态的在线文档"此属性支持ASP.NET基础结构,不能直接在您的代码中使用" (8认同)
  • 根据[docs](https://msdn.microsoft.com/en-us/library/system.web.hosting.iapplicationhost.getsitename(v = vs.110).aspx),"Web.Hosting" .HostingEnvironment.ApplicationHost.GetSiteName()`**不应该从你的代码中调用**.应该使用`Web.Hosting.HostingEnvironment.SiteName`代替. (5认同)

khl*_*hlr 18

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

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

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

  • 感谢您指出了这一点.在我的情况下,System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()工作,但后来我遇到了一个老化的"类型未解析为成员"与序列化,我无法追踪.切换到HostingEnvironment.SiteName后它就消失了.我认为它与MarshalByRefObject与序列化不兼容有关.万一有人也受到了这种打击,切换到HostingEnvironment.SiteName解决了这个问题. (2认同)

Chu*_*way 11

以下是检索网站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");
  }
Run Code Online (Sandbox Code Playgroud)

}

这是原帖的链接.

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


ntz*_*tze 9

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

通过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
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用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(); 
        } 
Run Code Online (Sandbox Code Playgroud)

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

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

HTH