チュートリアル : インストール時にアプリケーションを別の Web サービスにリダイレクトする

このチュートリアルでは、URL Behavior プロパティ、インストーラー クラス、および Web セットアップ プロジェクトを使って、別の Web サービスを使用するようにリダイレクトできる Web アプリケーションを作成する方法を紹介します。 開発時にはローカルの Web サービスを使用し、アプリケーションの配置時には稼動環境の Web サービスを使用する、という場合に便利です。

注意

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。

Web アプリケーション プロジェクトの作成

第一段階として、Web サービスへの Web 参照を含む ASP.NET Web アプリケーション プロジェクトを作成します。

プロジェクトを作成するには

  • Web サービスへの Web 参照を持つ Web アプリケーションを作成します。 このチュートリアルでは、有効な Web サービスへの Web 参照であればどんなものを使用してもかまいません。

インストーラー クラスの追加

インストーラー クラス (インストール コンポーネントとも呼ばれる) は、インストール時にカスタム動作として呼び出される .NET Framework クラスです。 この例では、クラス ライブラリ プロジェクトをソリューションに追加します。 このクラス ライブラリ プロジェクトでは、インストーラー クラスを作成し、その Install メソッドをオーバーライドして、Web アプリケーションの .config ファイルを修正するためのコードを追加します。

クラス ライブラリ プロジェクトを作成するには

  1. ソリューション エクスプローラーでソリューション ノードを右クリックし、[追加] をポイントして [新しいプロジェクト] をクリックします。

  2. [新しいプロジェクトの追加] ダイアログ ボックスの [Visual Basic] ノードで [クラス ライブラリ] をクリックします。

  3. プロジェクトに「InstallerClassLibrary」という名前を付けます。

インストーラー クラスを追加して実装するには

  1. ソリューション エクスプローラー[InstallerClassLibrary] プロジェクト ノードを右クリックし、[追加] をポイントして [クラス] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[インストーラー クラス] をクリックし、[ファイル名] ボックスに「WebServiceInstaller.vb」と入力します。

    [追加] をクリックすると、このクラスがプロジェクトに追加されて、インストーラー クラスのデザイナーが表示されます。

  3. デザイナーをダブルクリックしてコード エディターを表示します。

  4. WebServiceInstaller.vb 内のインストーラー クラス モジュールの下部 (End Class 宣言のすぐ上) に次のコードを追加します。このコードでは Install メソッドを実装しています。

    Public Overrides Sub Install(
            ByVal stateSaver As System.Collections.IDictionary)
    
        ' Gets the parameter passed across in the CustomActionData.
        Dim install_log As New System.IO.StreamWriter("Installation.log")
        install_log.AutoFlush = True
    
        Try
            Dim providedName = Me.Context.Parameters.Item("ServerName")
            Dim svcName = Me.Context.Parameters.Item("ServiceName")
    
            install_log.WriteLine("Starting Edit of the config file")
    
            If providedName = "" OrElse svcName = "" Then
                Throw New InstallException("No arguments specified")
            End If
    
            ' Uses reflection to find the location of the config file.
            Dim strConfigLoc =
                System.Reflection.Assembly.GetExecutingAssembly().Location
    
            Dim strTemp = strConfigLoc
            strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) -
              strTemp.LastIndexOf("\"))
            strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) -
              strTemp.LastIndexOf("\"))
    
            Dim fInfo As New System.IO.FileInfo(strTemp & "\web.config")
    
            install_log.WriteLine("File info: " & strTemp)
    
            If Not fInfo.Exists Then
                Throw New InstallException("Missing config file")
            End If
    
            ' Loads the config file into the XML DOM.
            ' Loads the config file into the XML DOM.
            Dim xmlDoc = XDocument.Load(fInfo.FullName)
    
            ' Finds the right node and change it to the new value.
            Dim foundIt As Boolean = False
            For Each node In xmlDoc.<configuration>.<appSettings>.<add>
                If node.@key = "servername.service" Then
                    ' Note that "Service1.asmx" should be replaced with the
                    ' actual name of the XML Web service file.
                    node.@value = "http://" &
                        providedName & "/" & svcName & "/Service1.asmx"
                    foundIt = True
                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.
            xmlDoc.Save(fInfo.FullName)
    
        Finally
            install_log.WriteLine("Ending edit of config file")
            install_log.Close()
        End Try
    
    End Sub
    

    上のコードは、まず、カスタム動作の進行状況を記録するインストール ログ ファイルを作成します。 次に、System.Reflection 名前空間を使用して、インストールするアセンブリと、関連付けられている .config ファイルを見つけます。 次に、XML ドキュメント モデルを使用して、appSettings セクションが見つかるまで .config ファイルを反復処理します。 キー servername.service が見つかったら、渡されたパラメーターを使って関連付けられている値を変更します。これにより、新しい Web サービスを使用するようにアプリケーションがリダイレクトされます。

  5. ソリューション エクスプローラーで、Web.config ファイルをダブルクリックして開きます。

  6. appSettings セクションにある Web サービスのキーの値をコピーします。 キーには servername.service という形式を使用します。servername は Web サービスが置かれたサーバー、service は Web サービスの名前です。

  7. コード エディターでインストーラー クラス モジュールを開き、"servername.service" というテキストを先ほどコピーした値で置き換えます。

Web セットアップ プロジェクトの追加

セットアップ プロジェクトを使用すると、アプリケーションのインストーラーを作成できます。 Windows インストーラーのテクノロジをベースとしているセットアップ プロジェクトには、インストール時にカスタム動作を実行する機能や、インストール時のユーザー インターフェイスをカスタマイズする機能があります。 セットアップ プロジェクトの詳細については、「アプリケーションとコンポーネントの配置」を参照してください。

Web セットアップ プロジェクトを追加するには

  1. ソリューション エクスプローラーでソリューション ノードを右クリックし、[追加] をポイントして [新しいプロジェクト] をクリックします。

  2. [新しいプロジェクトの追加] ダイアログ ボックスで、プロジェクトの種類ペインの [その他のプロジェクトの種類] ノードを展開し、[セットアップ/配置プロジェクト] ノードをクリックします。

    テンプレート ペインの [Web セットアップ プロジェクト] をクリックします。 [プロジェクト名] ボックスで、プロジェクトの名前を WebAppSetup に設定します。

    [OK] をクリックすると、プロジェクトがソリューションに追加されて、ファイル システム エディターが表示されます。

  3. [プロパティ] ウィンドウで、ProductName プロパティを選択し、Web アプリケーションの名前に設定します。

  4. ファイル システム エディターで、[Web アプリケーション フォルダー] を選択します。

  5. [操作] メニューの [追加] をポイントし、[プロジェクト出力] をクリックします。

  6. [プロジェクト出力グループの追加] ダイアログ ボックスで、[プロジェクト] ボックスの一覧の [InstallerClassLibrary] をクリックし、[プライマリ出力] をクリックします。

    [OK] をクリックすると、InstallerClassLibrary のプライマリ出力が Web セットアップ プロジェクトに追加されます。

カスタム動作の追加

カスタム動作を使用すると、インストールの終了時にコードを実行し、インストール中には処理できないアクションを実行できます。 カスタム動作のコードは、.dll、.exe、スクリプト、またはアセンブリの各ファイルに含めることができます。 カスタム動作の詳細については、「配置でのカスタム動作の管理」を参照してください。

インストーラー クラスをカスタム動作として追加するには

  1. ソリューション エクスプローラーWebAppSetup プロジェクトを選択します。

  2. [表示] メニューの [エディター] をポイントし、[カスタム動作] をクリックします。

    カスタム動作エディターが表示されます。

  3. カスタム動作エディターで、[インストール] ノードを選択します。

  4. [操作] メニューの [カスタム動作の追加] をクリックします。

  5. [Web アプリケーション フォルダー] をダブルクリックし、[InstallerClassLibrary (アクティブ) の プライマリ出力] をクリックします。

  6. [プロパティ] ウィンドウで、InstallerClass プロパティが True に設定されていることを確認します。

  7. [CustomActionData] プロパティを選択し、「/ServerName=[EDITA1] /ServiceName=[EDITA2]」と入力します。

    CustomActionData プロパティには、カスタム動作に渡されるパラメーターが 2 つあります。この 2 つのパラメーターは、スペースで区切ります。

ダイアログ ボックスの追加

インストール時にユーザー インターフェイス ダイアログ ボックスを表示すると、ユーザーから情報を収集できます。 ユーザー インターフェイス ダイアログの詳細については、「配置でのユーザー インターフェイスの管理」を参照してください。

カスタム ユーザー インターフェイス ダイアログ ボックスを追加するには

  1. ソリューション エクスプローラーで、セットアップ プロジェクトを選択します。

  2. [表示] メニューの [エディター] をポイントし、[ユーザー インターフェイス] をクリックします。

  3. ユーザー インターフェイス エディターで、[インストール] の下の [開始] ノードを選択します。

  4. [操作] メニューの [ダイアログの追加] をクリックします。

  5. [ダイアログの追加] ダイアログ ボックスで、[テキストボックス (A)] ダイアログを選択し、[OK] をクリックします。

  6. [操作] メニューの [上へ移動] をクリックします。[テキストボックス (A)] ダイアログが [インストール アドレス] ダイアログの上に移動するまでこの操作を繰り返します。

  7. [プロパティ] ウィンドウで、次のプロパティを設定します。

    プロパティ

    BannerText

    サーバー名とサービス名を入力してください

    Edit1Label

    サーバー名 :

    Edit1Value

    Localhost

    メモメモ
    既定のサーバーを指定します。現在使用している既定のサーバーの名前を入力できます。

    Edit2Label

    サービス名 :

    Edit2Value

    <name of the service>

    Edit3Visible

    False

    Edit4Visible

    False

    Edit1Property プロパティは "EDITA1" に設定され、Edit2Property プロパティは "EDITA2" に設定されています。 これらは、カスタム動作エディターで CustomActionData プロパティに入力した値に対応しています。 インストール時にユーザーがこれらのエディット コントロールにテキストを入力すると、CustomActionData プロパティによって、入力した値が自動的に渡されます。

アプリケーションのビルドと配置

最後に、セットアップ プロジェクトをビルドしてインストーラーを作成し、アプリケーションを対象サーバーにインストールします。

セットアップ プロジェクトをビルドするには

  • [ビルド] メニューの [Projectname のビルド] をクリックします。Projectname はセットアップ プロジェクトの名前です。

開発用コンピューターの Web サーバーにアプリケーションを配置するには

  1. ソリューション エクスプローラーで、セットアップ プロジェクトを選択します。

  2. [プロジェクト] メニューの [インストール] をクリックします。

ほかのコンピューターの Web サーバーにアプリケーションを配置するには

  1. Windows エクスプローラーで、プロジェクト ディレクトリに移動し、ビルドされたインストーラーを探します。 既定のパスは、\documents and settings\yourloginname\My Documents\Visual Studio Projects\setupprojectname\project configuration\productname.msi になります。 既定の project configuration は Debug です。

  2. .msi ファイルと、ディレクトリ内の他のファイルとサブディレクトリをすべて Web サーバーのコンピューターにコピーします。

  3. Web サーバー コンピューターで、Setup.exe ファイルをダブルクリックしてインストーラーを実行します。

参照

その他の技術情報

アプリケーションとコンポーネントの配置

配置でのカスタム動作の管理

配置でのユーザー インターフェイスの管理