2011-01-21 6 views
15

ASP.NETを使用して、実行時に現在のサイト(ホスト名、ポート、IPアドレス)のIISバインディング設定を取得する方法を知りました。 .NETはこれらの情報を取得する手段を提供していますか?実行時にIISバインディングを取得する

編集http:httpsからhttp:httpsに切り替えるときに、正しいポートにリダイレクトするようにhttpとhttpsポートを設定し、80/443以外のポートを使用する場合はhttpsからhttpに戻す方法が必要です。拡張特権なしでこれを行う方法はありますか?

よろしく

+0

実行しているIISのバージョンは何ですか? – RQDQ

+0

これはIIS 6,7および7.5で動作する必要があります。 – Jay

答えて

12

(管理者されることなく)それを達成するための唯一の方法は、Microsoft.Web.Administrationを使用しています。
http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx

を基本的にはIISが、我々は管理者であることを必要とせずに、アプリケーション自体から設定を読み込むことが可能であるワーカープロセス分離を呼び出す機能を持っているので:私はちょうど見、ということを行う方法について簡単にブログを書きました。 ADSI、メタベースなどを使用する場合は、管理者が必要です。

+2

ありがとうございます。必要なMicrosoft.Web.Administration.dllがサーバーのC:\ Windows \ System32 \ inetsrvにあります。また、HttpContext引数は必須ではないため、アプリケーションの開始時にロードすることができます。 – Derrick

+0

@carlosag私は 'Microsoft.Web.Administration'を使用して管理者権限なしでconfigを読みました。 configに*書き込み*するには管理者権限が必要ですか?私はこれに関する文書を見つけることができません。 –

3

あなたはSystem.DirectoryServicesアセンブリを使用して、IISメタベースにアクセスすることによって、これを達成することができるはずです。

たとえば、これらのサイトに含まれるすべてのサイトとプロパティの設定を列挙できます。

プロジェクトにこの参照を追加します。

using System.DirectoryServices

// Assuming your Server Id is 1, and you are connecting to your local IIS. 
DirectoryEntry de = new DirectoryEntry(@"IIS://localhost/W3SVC/1/Root"); 
foreach (DirectoryEntry entry in de.Children) 
{ 
    foreach (PropertyValueCollection property in entry.Properties) 
    { 
     Console.WriteLine("Name: {0}, Value {1}",property.PropertyName, property.Value); 
    } 
} 
関連する問題