Получить имя сайта IIS для веб-сайта ASP.NET - PullRequest
52 голосов
/ 31 октября 2009

В моем веб-приложении ASP.NET я хотел бы найти имя, которое было ему дано при создании в IIS, которое является уникальным для сервера. Меня не интересует доменное имя для веб-сайта, но фактическое имя, данное сайту в IIS.

Мне нужно быть в состоянии сделать это надежно для IIS6 и 7.

Чтобы было ясно, я говорю о данном имени в IIS, а не о доменном имени и не пути к виртуальному каталогу.

Значение из IIS, которое я хотел бы прочитать из C # http://img252.imageshack.us/img252/6621/capturedz.png

Ответы [ 6 ]

57 голосов
/ 31 октября 2009
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
18 голосов
/ 26 июня 2013

Как уже упоминали @belugabob и @CarlosAg, я бы предпочел использовать System.Web.Hosting.HostingEnvironment.SiteName вместо System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName(), потому что метод IApplicationHost.GetSiteName не предназначен для непосредственного вызова! ( * 1004 MSDN *)

Так что вам лучше использовать свойство HostingEnvironment.SiteName! ( 1008 * MSDN *)

Я думаю, что это должен быть правильный ответ по отношению к документации;)

10 голосов
/ 31 октября 2009

Вот связанный пост при получении идентификатора сайта.

Вот код, который может работать для вас:

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, но если вы устанавливаете компоненты совместимости IIS6 для IIS7, он должен работать.

9 голосов
/ 01 ноября 2009

Вы ищете 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
}

Вы также можете использовать 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, но я предлагаю вам перейти на WMI, который работает быстрее, чем ADSI. Если вы используете WMI, взгляните на WMI Code Creator 1.0 (бесплатно / разработано Microsoft). Он сгенерирует код для вас.

НТН

0 голосов
/ 03 ноября 2014

Вы можете использовать ниже код

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;
}
0 голосов
/ 06 апреля 2011

При подключении к удаленному серверу сначала необходимо выполнить ServerManager.OpenRemote ("имя_сервера").

По сути дела, что-то вроде этого

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

            }

см. Справку MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...