web-dev-qa-db-ja.com

Get IIS ASP.NET Webサイトのサイト名

ASP.NET Webアプリでは、サーバーに固有のIISで作成されたときに付けられた名前を検索したいと思います。 Webサイトのドメイン名には興味がありませんが、IISでサイトに付けられた実際の名前には興味がありません。

IIS6および7で確実に実行できるようにする必要があります。

明確にするために、ドメイン名や仮想ディレクトリパスではなく、IISの名前について説明しています。

Value from IIS C#から読みたいhttp://img252.imageshack.us/img252/6621/capturedz.png

52
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
57
Mehdi Golchin

@belugabobと@CarlosAgが既に述べたように、IApplicationHost.GetSiteNameメソッドは直接呼び出されることを意図していないので、System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()の代わりにSystem.Web.Hosting.HostingEnvironment.SiteNameを使用したいです。 ( msdn

したがって、HostingEnvironment.SiteNameプロパティを使用することをお勧めします。 ( msdn

私はこれがドキュメントに関して正しい答えであるべきだと思う;)

18
khlr

以下は、サイト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互換性コンポーネントをインストールすると動作するはずです。

11
Chuck Conway

あなたが探しているServerManagerMicrosoft.Web.Administration) IIS 7.0構成システムへの読み取りおよび書き込みアクセスを提供します。

Microsoft.Web.Administration.SiteCollectionを反復処理し、サイトオブジェクトを使用してWebサイトへの参照を取得し、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はonlywithIIS7

IIS6では、ADSIとWMIの両方を使用してこれを行うことができますが、ADSIよりも高速なWMIを使用することをお勧めします。 WMIを使用している場合は、 WMI Code Creator 1. (無料/マイクロソフトが開発)をご覧ください。それはあなたのためにコードを生成します。

HTH

9
ntze

リモートサーバーに接続するときは、最初にServerManager.OpenRemote( "serverName")を実行する必要があります。

基本的にこのようなことをする

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

            }

msdnヘルプを参照

0
pungggi

以下のコードを使用できます

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
Sachin Bhale