次の方法で共有


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

更新 : 2007 年 11 月

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

5k10s063.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

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

第一段階として、Web サービスへの Web 参照を含む ASP.NET 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 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 サービスを使用するようにアプリケーションがリダイレクトされます。

  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

    5k10s063.alert_note(ja-jp,VS.90).gifメモ :
    既定のサーバーを指定します。現在使用している既定のサーバーの名前を入力できます。

    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 ファイルをダブルクリックしてインストーラを実行します。

参照

概念

インストール コンポーネントの概要

その他の技術情報

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

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

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