チュートリアル : インストール時にアプリケーションを別の Web サービスにリダイレクトする
更新 : 2007 年 11 月
このチュートリアルでは、URL Behavior プロパティ、インストーラ クラス、および Web セットアップ プロジェクトを使って、別の Web サービスを使用するようにリダイレクトできる Web アプリケーションを作成する方法を紹介します。開発時にはローカルの Web サービスを使用し、アプリケーションの配置時には稼動環境の Web サービスを使用する、という場合に便利です。
メモ : |
---|
使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。 |
Web アプリケーション プロジェクトの作成
第一段階として、Web サービスへの Web 参照を含む ASP.NET Web アプリケーション プロジェクトを作成します。
プロジェクトを作成するには
- Web サービスへの Web 参照を持つ Web アプリケーションを作成します。このチュートリアルでは、有効な Web サービスへの Web 参照であればどんなものを使用してもかまいません。たとえば、「チュートリアル : Visual Basic または Visual C# を使った Web サービスへのアクセス」で説明した Web アプリケーションを使用してもかまいません。
インストーラ クラスの追加
インストーラ クラス (インストール コンポーネントとも呼ばれる) は、インストール時にカスタム動作として呼び出される .NET Framework クラスです。この例では、クラス ライブラリ プロジェクトをソリューションに追加します。このクラス ライブラリ プロジェクトでは、インストーラ クラスを作成し、その Install メソッドをオーバーライドして、Web アプリケーションの .config ファイルを修正するためのコードを追加します。インストーラ クラスの詳細については、「インストール コンポーネントの概要」を参照してください。
クラス ライブラリ プロジェクトを作成するには
ソリューション エクスプローラでソリューション ノードを右クリックし、[追加] をポイントして [新しいプロジェクト] をクリックします。
[新しいプロジェクトの追加] ダイアログ ボックスの [Visual Basic] ノードで [クラス ライブラリ] をクリックします。
プロジェクトに「InstallerClassLibrary」という名前を付けます。
インストーラ クラスを追加して実装するには
ソリューション エクスプローラで [InstallerClassLibrary] プロジェクト ノードを右クリックし、[追加] をポイントして [クラス] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[インストーラ クラス] をクリックし、[ファイル名] ボックスに「WebServiceInstaller.vb」と入力します。
[追加] をクリックすると、このクラスがプロジェクトに追加されて、インストーラ クラスのデザイナが表示されます。
デザイナをダブルクリックしてコード エディタを表示します。
WebServiceInstaller.vb 内のインストーラ クラス モジュールの下部 (End Class 宣言のすぐ上) に次のコードを追加します。このコードでは Install メソッドを実装しています。
Public Overrides Sub Install(ByVal stateSaver As _ System.Collections.IDictionary) ' Gets the parameter passed across in the CustomActionData. Dim installlog As New System.IO.StreamWriter("Installation.log") installlog.AutoFlush = True Try Dim ProvidedName As String = Me.Context.Parameters.Item("ServerName") Dim SvcName As String = Me.Context.Parameters.Item("ServiceName") installlog.WriteLine("Starting Edit of the config file") If ProvidedName = "" Or SvcName = "" Then Throw New InstallException("No arguments specified") End If ' Uses reflection to find the location of the config file. Dim Asm As System.Reflection.Assembly = _ System.Reflection.Assembly.GetExecutingAssembly Dim strConfigLoc As String strConfigLoc = Asm.Location Dim strTemp As String strTemp = strConfigLoc strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _ strTemp.LastIndexOf("\")) strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - _ strTemp.LastIndexOf("\")) Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo( _ strTemp & "\web.config") installlog.WriteLine("File info: " & strTemp) If Not FileInfo.Exists Then Throw New InstallException("Missing config file") End If ' Loads the config file into the XML DOM. Dim XmlDocument As New System.Xml.XmlDocument() XmlDocument.Load(FileInfo.FullName) ' Finds the right node and change it to the new value. Dim Node As System.Xml.XmlNode Dim FoundIt As Boolean = False For Each Node In _ XmlDocument.Item("configuration").Item("appSettings") ' Skips any comments. If Node.Name = "add" Then If Node.Attributes.GetNamedItem("key").Value = _ "servername.service" Then ' Note that "Service1.asmx" should be replaced with the ' actual name of the XML Web service file. Node.Attributes.GetNamedItem("value").Value = "http://" _ & ProvidedName & "/" & SvcName & "/Service1.asmx" FoundIt = True End If End If Next Node If Not FoundIt Then Throw New InstallException("Config file did not contain a ServerName section") End If ' Writes out the new config file. XmlDocument.Save(FileInfo.FullName) Finally installlog.WriteLine("Ending edit of config file") installlog.Close() End Try End Sub
上のコードは、まず、カスタム動作の進行状況を記録するインストール ログ ファイルを作成します。次に、System.Reflection 名前空間を使用して、インストールするアセンブリと、関連付けられている .config ファイルを見つけます。次に、XML ドキュメント モデルを使用して、appSettings セクションが見つかるまで .config ファイルを反復処理します。キー servername.service が見つかったら、渡されたパラメータを使って関連付けられている値を変更します。これにより、新しい Web サービスを使用するようにアプリケーションがリダイレクトされます。
ソリューション エクスプローラで、Web.config ファイルをダブルクリックして開きます。
appSettings セクションにある Web サービスのキーの値をコピーします。キーには servername.service という形式を使用します。servername は Web サービスが置かれたサーバー、service は Web サービスの名前です。
コード エディタでインストーラ クラス モジュールを開き、"servername.service" というテキストを先ほどコピーした値で置き換えます。
Web セットアップ プロジェクトの追加
セットアップ プロジェクトを使用すると、アプリケーションのインストーラを作成できます。Windows インストーラのテクノロジをベースとしているセットアップ プロジェクトには、インストール時にカスタム動作を実行する機能や、インストール時のユーザー インターフェイスをカスタマイズする機能があります。セットアップ プロジェクトの詳細については、「アプリケーションとコンポーネントの配置」を参照してください。
Web セットアップ プロジェクトを追加するには
ソリューション エクスプローラでソリューション ノードを右クリックし、[追加] をポイントして [新しいプロジェクト] をクリックします。
[新しいプロジェクトの追加] ダイアログ ボックスで、プロジェクトの種類ペインの [その他のプロジェクトの種類] ノードを展開し、[セットアップ/配置プロジェクト] ノードをクリックします。
テンプレート ペインの [Web セットアップ プロジェクト] をクリックします。[プロジェクト名] ボックスで、プロジェクトの名前を WebAppSetup に設定します。
[OK] をクリックすると、プロジェクトがソリューションに追加されて、ファイル システム エディタが表示されます。
[プロパティ] ウィンドウで、ProductName プロパティを選択し、Web アプリケーションの名前に設定します。
ファイル システム エディタで、[Web アプリケーション フォルダ] を選択します。
[操作] メニューの [追加] をポイントし、[プロジェクト出力] をクリックします。
[プロジェクト出力グループの追加] ダイアログ ボックスで、[プロジェクト] ボックスの一覧の [InstallerClassLibrary] をクリックし、[プライマリ出力] をクリックします。
[OK] をクリックすると、InstallerClassLibrary のプライマリ出力が Web セットアップ プロジェクトに追加されます。
カスタム動作の追加
カスタム動作を使用すると、インストールの終了時にコードを実行し、インストール中には処理できないアクションを実行できます。カスタム動作のコードは、.dll、.exe、スクリプト、またはアセンブリの各ファイルに含めることができます。カスタム動作の詳細については、「配置でのカスタム動作の管理」を参照してください。
インストーラ クラスをカスタム動作として追加するには
ソリューション エクスプローラで WebAppSetup プロジェクトを選択します。
[表示] メニューの [エディタ] をポイントし、[カスタム動作] をクリックします。
カスタム動作エディタが表示されます。
カスタム動作エディタで、[インストール] ノードを選択します。
[操作] メニューの [カスタム動作の追加] をクリックします。
[Web アプリケーション フォルダ] をダブルクリックし、[InstallerClassLibrary (アクティブ) の プライマリ出力] をクリックします。
[プロパティ] ウィンドウで、InstallerClass プロパティが True に設定されていることを確認します。
[CustomActionData] プロパティを選択し、「/ServerName=[EDITA1] /ServiceName=[EDITA2]」と入力します。
CustomActionData プロパティには、カスタム動作に渡されるパラメータが 2 つあります。この 2 つのパラメータは、スペースで区切ります。
ダイアログ ボックスの追加
インストール時にユーザー インターフェイス ダイアログ ボックスを表示すると、ユーザーから情報を収集できます。ユーザー インターフェイス ダイアログの詳細については、「配置でのユーザー インターフェイスの管理」を参照してください。
カスタム ユーザー インターフェイス ダイアログ ボックスを追加するには
ソリューション エクスプローラで、セットアップ プロジェクトを選択します。
[表示] メニューの [エディタ] をポイントし、[ユーザー インターフェイス] をクリックします。
ユーザー インターフェイス エディタで、[インストール] の下の [開始] ノードを選択します。
[操作] メニューの [ダイアログの追加] をクリックします。
[ダイアログの追加] ダイアログ ボックスで、[テキストボックス (A)] ダイアログを選択し、[OK] をクリックします。
[操作] メニューの [上へ移動] をクリックします。[テキストボックス (A)] ダイアログが [インストール アドレス] ダイアログの上に移動するまでこの操作を繰り返します。
[プロパティ] ウィンドウで、次のプロパティを設定します。
プロパティ
値
BannerText
サーバー名とサービス名を入力してください
Edit1Label
サーバー名 :
Edit1Value
Localhost
メモ :既定のサーバーを指定します。現在使用している既定のサーバーの名前を入力できます。Edit2Label
サービス名 :
Edit2Value
<name of the service>
Edit3Visible
False
Edit4Visible
False
Edit1Property プロパティは "EDITA1" に設定され、Edit2Property プロパティは "EDITA2" に設定されています。これらは、カスタム動作エディタで CustomActionData プロパティに入力した値に対応しています。インストール時にユーザーがこれらのエディット コントロールにテキストを入力すると、CustomActionData プロパティによって、入力した値が自動的に渡されます。
アプリケーションのビルドと配置
最後に、セットアップ プロジェクトをビルドしてインストーラを作成し、アプリケーションを対象サーバーにインストールします。
セットアップ プロジェクトをビルドするには
- [ビルド] メニューの [Projectname のビルド] をクリックします。Projectname はセットアップ プロジェクトの名前です。
開発用コンピュータの Web サーバーにアプリケーションを配置するには
ソリューション エクスプローラで、セットアップ プロジェクトを選択します。
[プロジェクト] メニューの [インストール] をクリックします。
ほかのコンピュータの Web サーバーにアプリケーションを配置するには
Windows エクスプローラで、プロジェクト ディレクトリに移動し、ビルドされたインストーラを探します。既定のパスは、\documents and settings\yourloginname\My Documents\Visual Studio Projects\setupprojectname\project configuration\productname.msi になります。既定の project configuration は Debug です。
.msi ファイルと、ディレクトリ内の他のファイルとサブディレクトリをすべて Web サーバーのコンピュータにコピーします。
Web サーバー コンピュータで、Setup.exe ファイルをダブルクリックしてインストーラを実行します。