ASP.NET Webアプリでは、サーバーに固有のIISで作成されたときに付けられた名前を検索したいと思います。 Webサイトのドメイン名には興味がありませんが、IISでサイトに付けられた実際の名前には興味がありません。
IIS6および7で確実に実行できるようにする必要があります。
明確にするために、ドメイン名や仮想ディレクトリパスではなく、IISの名前について説明しています。
Value from IIS C#から読みたいhttp://img252.imageshack.us/img252/6621/capturedz.png
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
@belugabobと@CarlosAgが既に述べたように、IApplicationHost.GetSiteNameメソッドは直接呼び出されることを意図していないので、System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()
の代わりにSystem.Web.Hosting.HostingEnvironment.SiteName
を使用したいです。 ( msdn )
したがって、HostingEnvironment.SiteNameプロパティを使用することをお勧めします。 ( msdn )
私はこれがドキュメントに関して正しい答えであるべきだと思う;)
以下は、サイト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互換性コンポーネントをインストールすると動作するはずです。
あなたが探しているServerManager(Microsoft.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
リモートサーバーに接続するときは、最初に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;
}