WIN1@Codename

Codename

IISのProvisioning

これから紹介するのはIIS6.0に対してのプロビジョニングです。
IISにサイトを作成する場合一般的にはIISの管理ツールによりGUIベースで行うことが可能です。
ですが、ホスティングサーバーとして使用する場合には、自動的にそれらの設定を完了させるといった要件が発生します。
 
Webサイトを作成する場合、IISに対して働きかけるプロバイダが2種類あります。
1つはWMI(Windows Management Instrumentation)、もう1つはADSI(Active Directory Service Interfaces)です。
当初、両方のインターフェースを用いた方法をご紹介しようと考えていたのですが、WMIのサイト作成時のプロパティー設定においてバグと思われる部分があり、その回避方法が確認できておりません。
ですので、ここではADSIに限定してご紹介しようと思います。
まずはじめは、Webサイトの作成からです。
 

Imports System.IO
Imports System.DirectoryServices

'Webサイトの元となるディレクトリを作成

Dim strDirectoryPath As String = "C:\WebSite\NewSite"
If Not System.IO.Directory.Exists(strDirectoryPath) Then
    Directory.CreateDirectory(strDirectoryPath)
End If

'アプリケーションプールの作成
Dim objAppPools As New DirectoryEntry("IIS://localhost/W3SVC/AppPools")
Dim objAppPool As DirectoryEntry = objAppPools.Invoke("Create", "IIsApplicationPool", "新しいアプリケーションプール")
objAppPool.Invoke("Put", "AppPoolIdentityType", 3)
objAppPool.Invoke("Put", "WAMUserName", "Account")
objAppPool.Invoke("Put", "WAMUserPass", "Password")
objAppPool.Invoke("SetInfo")

'IISWebサービスの取得
Dim objWebService As New System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC")

'新規サイトIDを取得
Dim intNewSiteID As Integer = 1
Dim objSite As System.DirectoryServices.DirectoryEntry
For Each objSite In objWebService.Children
    If objSite.SchemaClassName = "IIsWebServer" Then
        Dim intSiteID As Integer = Convert.ToInt32(objSite.Name)
        If intSiteID >= intNewSiteID Then intNewSiteID = intSiteID + 1
    End If
Next

'Webサイトの作成
Dim objNewSite As DirectoryEntry = objWebService.Invoke("Create", "IIsWebServer", intNewSiteID)
objNewSite.Invoke("Put", "ServerComment", "新しいサイト")
objNewSite.Invoke("Put", "ServerBindings", New Object() {"192.168.0.1:80:www.win1.jp"}) 
objNewSite.Invoke("Put", "KeyType", "IIsWebServer")
objNewSite.Invoke("Put", "ServerState", 2)
objNewSite.Invoke("Put", "ServerAutoStart", 1)
objNewSite.Invoke("Put", "AppPoolId", "新しいアプリケーションプール")
objNewSite.Invoke("SetInfo")

'Webサイト詳細設定
Dim objVirtualDir As DirectoryEntry = objNewSite.Children.Add("Root", "IISWebVirtualDir")
objVirtualDir.Invoke("Put", "AppIsolated", 2)
objVirtualDir.Invoke("Put", "Path", "C:\WebSite\NewSite")
objVirtualDir.Invoke("Put", "AccessFlags", 513) '1 + 512 AccessRead + AccessScript
objVirtualDir.Invoke("Put", "AuthFlags", 3) '1 + 2 AuthAnonymous + AuthBasic
objVirtualDir.Invoke("Put", "AppRoot", "LM/W3SVC/" & intNewSiteID & "/Root")
objVirtualDir.Invoke("Put", "AppFriendlyName", "既定のアプリケーション")
objVirtualDir.Invoke("SetInfo"
 

 

以上でWebサイトが作成されます。

余談ですが、なぜ、WMI、ADSIの二通りの方法があるのかといいますと、IIS5.0の時代ではWMI自体は存在したものの、IISに対するプログラム的は働きかけは、ActiveDirectoryを実装しはじめたWindows2000のLDAP情報にアクセスする方法と同様に、ADSIを介して行うのが一般的な方法でした。 
その後、IIS6.0(WindowsServer2003)の時代になり、Windowsの管理を統合的に行うためのインタフェースとしてWMIが本格的に実装されるとともに、IISの管理もWMIから行うことが可能になったのです。
従って、「IISのWebサイト作成」に関しては、現時点では二つのインターフェースはほぼ同様の機能を提供することができるものの、トータル的なサーバー管理といった面から見れば、WMIによるプロビジョニングが今後一般的な手法となると思われます。
(参考:ADSI プロバイダと IIS WMI プロバイダの比較
私的な好みとしてはWMIを用いた方法で統一したいと思うのですが、前述の問題があり残念です。
WMIを用いたサイト作成方法もいずれ紹介できればと思います。


コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/69-c7d52375
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad