.Net は実際、これを非常にうまく行ってくれます。 FCL は、この作業を完了するのに役立つ多くのクラスを提供しており、開発作業を非常にシンプルかつ快適なものにしています。 IIS を制御するプログラミングは実際には非常に簡単です。ASP と同様に、.Net は IIS を操作するために ADSI を使用する必要がありますが、.Net はより強力な機能を備えた新しい機能を提供するため、現時点では GetObject は必要ありません。
System.DirectoryServices 名前空間には、Active Directory にアクセスするための強力な機能を提供する DirectoryEntry、DirectoryEntries が含まれています。これらのクラスは、IIS、LDAP、NDS、および WinNT を操作できるようにします
。ここではIISの制御についてお話しますが、一般的にIISを運用する場合は仮想ディレクトリを操作することが多いので、これをメインの内容として記載します。
まず最初に、IIS の階層構造を理解する必要があります。次の画像は、IIS の階層構造を非常によく説明しています。
[htmChina:Image id=Image1|12][/htmChina:Image]
IIS の制御構文を理解するには、上図を理解し、IIS メタデータ (Metabase) の階層構造を理解する必要があります。グラフ内の各ノードはキーと呼ばれ、各キーには 1 つ以上の値を含めることができます。これらの値は、IIS メタデータのキーと呼ばれるものであり、メタデータの属性の設定となります。データ内の値は IIS の設定に影響します。これが私たちのプログラミングの基本的な考え方であり核心です。
さらに、スキーマの概念も理解する必要があります。これは IIS のアーキテクチャの名前を表します。つまり、IIS メタデータのキーの種類、具体的には各ノードの種類を理解できます。 IIS には仮想ディレクトリ、通常のディレクトリ、ファイルがあることがわかっています。これらはすべて IIS の要素であり、それらを区別するラベルがスキーマです。たとえば、仮想ディレクトリのスキーマは「IIsVirtualDir」、通常のディレクトリは「IIsWebDir」です。このようにして、ディレクトリを追加または削除すると、IIS は仮想ディレクトリを追加しているのか、通常のディレクトリを追加しているのかを認識します。
仮想ディレクトリ
DirectoryEntry の作成は、.Net が提供する素晴らしい贈り物です。ディレクトリ エントリという名前だけで、その機能がわかります。 ADSI を使用したことがある人は、IIS と WinNT を操作するときにパスも指定する必要があることを知っています。IIS を操作するとき、このパスの形式は次のとおりです。IIS
://コンピューター名/サービス/Webサイト/ディレクトリ
コンピューター名: つまり、オペレーティング システムのパス。サーバー名には名前または IP を使用できます。最も一般的に使用されるのは localhost です。
サービス:IISにはWeb、FTP、SMTPのサービスがあり、主にIISのWeb機能を運用しますので、FTPの場合は「W3SVC」となります。
Web サイト: IIS サービスには多くのサイトを含めることができます。これは、操作を設定するために使用されるサイトです。その値は数値で、デフォルトは 1 で、デフォルトのサイトを示します。他にサイトがある場合は 1 から開始します。
ディレクトリ: 言うまでもなく、サイトのトップディレクトリは「ROOT」であり、他のディレクトリはその子ディレクトリです。
まず、サイトの最上位ディレクトリ (ルート ディレクトリ) を取得します。
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
このオブジェクトの作成時に例外が発生しない場合、それは意味します。このディレクトリが実際に存在することを確認します。
たとえば、新しい仮想ディレクトリを追加します。「Aspcn」を追加します。
DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn", "IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
ルートフォルダー.CommitChanges();
ディレクトリを作成する考え方は非常に簡単です。つまり、ルート ディレクトリ (rootfolder.Children) のサブセットに別のレコードを追加します。ここでは、DirectoryEntries クラスの Add メソッドが使用され、これを表す DirectoryEntry が返されます。 1 つのパラメータは仮想ディレクトリの名前で、2 つ目は追加したディレクトリのタイプを示すスキーマのクラス名です。次に、DirectoryEntry の Invoke メソッドを使用して、ADSI の「AppCreate」メソッドを呼び出し、実際にディレクトリを作成します (この手順を実行しなくてもディレクトリは正常に作成されるようですが、安全のため、すべての人が使用する必要があります)。最後に、ルート ディレクトリの新しい CommitChanges メソッドを呼び出して、この操作を確認します。
新しいディレクトリを作成するときに、同時にこのディレクトリの属性に値を割り当てることもできますが、私の実際の経験から、新しいディレクトリを作成するときに値を割り当てる場合はこれを行わない方がよいと言えます。たとえば、重要な属性はディレクトリの実際の Path 属性を表します。したがって、Feidao では、最初にディレクトリを作成してから値を割り当てる、つまりディレクトリ情報を更新することをお勧めします。
仮想ディレクトリを更新します
。誰もが IIS に精通しており、読み取り可能 (AccessRead)、書き込み可能 (AccessWrite)、実行可能 (AccessExecute) などの IIS のいくつかの重要な設定を理解していると思います。これらは、DirectoryEntry の Properties プロパティ コレクションに値を割り当てることで実現できます。割り当ては 2 つの方法で行うことができます。1
つ目は、dir.Properties["AccessRead"].Add(true)
などの Properties コレクションの Add メソッドを呼び出すことです
。2つ目は、最初のインデックス値に値を割り当てることです。 :
dir.Properties["AccessRead"][0] = true;
どちらの方法も可能です。それはあなたの好みによります。
値を
割り当てる前に、割り当てるターゲットを決定する必要があります:) ここでは、次のように DirectoryEntries クラスの Find メソッドを使用します
。見つかったので、割り当ての準備ができました。値を割り当てるときは、必ずよく見てください。仮想ディレクトリには多数の属性値が存在する可能性があり、それらの多くを確認することができます。 。
:(
多すぎるため、繰り返しません。Microsoft の Web サイトで確認できます:)
より一般的に使用されるものは、AccessRead、AccessWrite、AccessExecute、AccessScript、DefaultDoc、EnableDefaultDoc、Path です
。
仮想ディレクトリも非常に簡単です。削除したい仮想ディレクトリを見つけて、AppDelete メソッドを呼び出すだけです。
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
ルートフォルダー.CommitChanges();
もう 1 つの方法は、ルート ディレクトリの Delete メソッドを呼び出すことです。
object[] paras = 新しいオブジェクト[2];
paras[0] = "IIsWebVirtualDir"; // 操作が仮想ディレクトリであることを示します
paras[1] = "Aspcn";
rootfolder.Invoke("削除",paras);
ルートフォルダー.CommitChanges();