Share via


インストール中にアプリケーションをリダイレクトして他の XML Web サービスを対象にする

Steve Hoag
Visual Studio Team
Microsoft Corporation

November 2001
日本語版最終更新日 2003 年 5 月 6 日

要約 : この文書では、リダイレクトして他の XML Web サービスを対象にできる、Microsoft® Visual Basic® .NET の Web アプリケーションを作成する方法について説明します。この作成では、URL の動作プロパティ、インストーラ クラス、および Web セットアップ プロジェクトを使用します。

目次

はじめに
URL の動作をダイナミックにする
インストーラ クラスを追加する
セットアップ プロジェクトを追加する
インストーラ クラスをカスタム動作として追加する
ユーザー インターフェイス ダイアログ ボックスを追加する
ビルドとインストール
まとめ

はじめに

XML Web サービスを対象とするアプリケーションの開発では、Web サーバーに既にインストールされている XML Web サービスを対象とするケースがほとんどです。一方、アプリケーションの実稼働バージョンの配置時に、他の XML Web サービスを対象にする場合もあります。たとえば、開発時には開発サーバー上にある XML Web サービスのテスト バージョンを対象にしていても、完成したアプリケーションでは、別のサーバーにインストールされている XML Web サービスのバージョンを対象にする必要がある場合です。また、アプリケーションをインストールするユーザーが、XML Web サービスのバージョン (イントラネット上にある XML Web サービスやファイアウォールの外部からアクセス可能な XML Web サービスなど) をインストール中に選択できるようにする場合もあります。

この文書では、リダイレクトして他の XML Web サービスを対象にできる Web アプリケーションの作成方法について説明します。このアプリケーション作成プロセスには、次のような処理が含まれています。

  1. 実行時に XML Web サービスの場所を検索する URL の動作プロパティを指定します。
  2. インストールの最後に、カスタム動作を実行するインストール コンポーネントを追加します。
  3. セットアップ プロジェクトを使用して、アプリケーションのカスタム ユーザー インターフェイスを備えたインストーラを作成します。

最初の手順は、XML Web サービスの Web 参照を備えた Web アプリケーションの作成です。Web アプリケーションの作成方法の詳細については、Visual Studio® .NET ドキュメントの 「チュートリアル : Visual Basic または Visual C# を使った XML Web サービスの作成」 を参照してください。

URL の動作をダイナミックにする

実行時に XML Web サービスの場所を検索するために、アプリケーションには XML Web サービスの URL を格納しておきます。XML Web サービスに対する Web 参照の URL の動作プロパティで、URL の格納場所を指定します。URL の動作プロパティを [スタティック] (既定値) に設定すると、URL は Web 参照の一部としてハードコードされます。URL の動作プロパティを [ダイナミック] に設定すると、URL を指定するエントリが、アプリケーションの Web.config ファイルにある appSettings セクションに追加されます。

URL の動作プロパティを [ダイナミック] に設定するには

  1. ソリューション エクスプローラで [Web References] ノードを展開し、XML Web サービスの参照を選択します。

  2. [プロパティ] ウィンドウで URL の動作プロパティを選択し、設定を [ダイナミック] に変更します。

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

    このファイルの最後の方に、<appSettings> セクションがあり、XML Web サービスの名前を指定するキーとその URL を指定する値が記載されています。たとえば、MyWebApp という名前のアプリケーションがローカル コンピュータ上の MyWebService にアクセスする場合は、次のように表示されます。

    <appSettings><add key="MyWebApp.localhost.Service1" value=https://localhost/MyWebService/Service1.asmx/></appSettings>

2 番目の手順は、インストール中に構成ファイルを変更するときに使用するインストーラ クラスの追加です。

インストーラ クラスを追加する

インストーラ クラス (別名インストール コンポーネント) は、インストール中にカスタム動作として呼び出される .NET Framework クラスです。ここでは、インストーラ クラスを追加して Install メソッドをオーバーライドし、構成ファイルを変更するコードを追加します。インストーラ クラスの詳細については、Visual Studio .NET ドキュメントの 「インストール コンポーネントの概要」 を参照してください。

インストーラ クラスを追加するには

  1. [プロジェクト] メニューで [新しい項目の追加] を選択します。

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

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

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

  4. インストーラ クラス モジュールの最後にある End Class 宣言のすぐ上に、Install メソッド用の次のコードを追加します。

    Public Overrides Sub Install(ByVal stateSaver As 
    System.Collections.IDictionary)
       ' 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("構成ファイルの編集を開始します")
    
          If ProvidedName = "" Or SvcName = "" Then
             Throw New InstallException("引数が指定されていません")
          End If
    
          ' reflection 機能を使用して構成ファイルの場所を見つけます。
    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("ファイル情報 : " & strTemp)
    
          If Not FileInfo.Exists Then
             Throw New InstallException("構成ファイルが見つかりません")
          End If
    
          ' 構成ファイルを XML DOM に読み込みます。
    Dim XmlDocument As New System.Xml.XmlDocument()
          XmlDocument.Load(FileInfo.FullName)
    
          ' 正しいノードを見つけて新しい値に変更します。
    Dim Node As System.Xml.XmlNode
          Dim FoundIt As Boolean = False
          For Each Node In 
             XmlDocument.Item("configuration").Item("appSettings")
             ' コメントはすべてスキップします。
    If Node.Name = "add" Then
                If Node.Attributes.GetNamedItem("key").Value = 
    "appname.servername.service" Then
                   ' "Service1.asmx" は Web Services ファイルの
                   ' 実際の名前に置き換える必要があります。
    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("構成ファイルには 
                ServerName セクションがありません")
             End If
    
             ' 新しい構成ファイルを作成します。
    XmlDocument.Save(FileInfo.FullName)
    
       Finally
          installlog.WriteLine("構成ファイルの編集が終了しました")
          installlog.Close()
       End Try
    
    End Sub
    

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

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

  6. このファイルの appSettings セクションにある、目的の XML Web サービスのキー値をコピーします。XML Web サービスのキーは、<アプリケーション名>.<サーバー名>.<サービス> の形で示されます。ここで、<アプリケーション名> はアプリケーションの名前、<サーバー名> は XML Web サービスが格納されているサーバーの名前、<サービス> は XML Web サービスの名前をそれぞれ表します。

  7. インストーラ クラス モジュールをコード エディタで開き、appname.servername.service を上の手順でコピーした値に置き換えます。

次の手順は、アプリケーションのセットアップ プロジェクトの追加です。

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

アプリケーションのインストーラ作成には、セットアップ プロジェクトを使用します。Windows® インストーラ テクノロジに基づいて、セットアップ プロジェクトには、インストール中にカスタム動作を実行する機能やインストール時のユーザー インターフェイスをカスタマイズする機能が組み込まれています。セットアップ プロジェクトの詳細については、Visual Studio .NET ドキュメントの 「アプリケーションとコンポーネントの配置」 を参照してください。

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

  1. [ファイル] メニューの [プロジェクトの追加] をポイントし、[新しいプロジェクト] をクリックします。

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

  3. [テンプレート] ペインで [Web セットアップ プロジェクト] を選択し、[OK] をクリックします。

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

  4. [プロパティ] ウィンドウで ProductName プロパティを選択し、目的のアプリケーションの名前を指定します。

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

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

  7. [プロジェクト出力グループの追加] ダイアログ ボックスで目的のアプリケーション プロジェクトを選択し、[プライマリ出力] と [コンテンツ ファイル] を選択して [OK] をクリックします。

次の手順は、インストールの最後に実行されるカスタム動作の追加です。

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

カスタム動作はインストールの最後にコードを実行するために使用します。これにより、インストール中には扱えない処理を実行できます。カスタム動作のコードは、.dll、.exe、スクリプト、またはアセンブリ ファイルに組み込むことができます。カスタム動作の詳細については、Visual Studio .NET ドキュメントの 「配置でのカスタム動作の管理」 を参照してください。

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

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

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

    カスタム動作エディタが開きます。

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

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

  5. [Web アプリケーション フォルダ] をダブルクリックし、[<プロジェクト名> のプライマリ出力] を選択して [OK] をクリックします。

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

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

    このプロパティでは、カスタム動作に渡す 2 つのパラメータを、スペースで区切って指定します。

次の手順は、インストール中に情報を入力するためのユーザー インターフェイスの追加です。

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

ユーザーから情報を収集するため、インストール中にユーザー インターフェイス ダイアログ ボックスが表示されます。ユーザー インターフェイス ダイアログ ボックスの詳細については、Visual Studio .NET ドキュメントの 「配置でのユーザー インターフェイスの管理」 を参照してください。

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

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

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

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

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

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

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

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

    プロパティ名
    BannerText サーバー名とサービス名を入力
    Edit1Label サーバー名 :
    Edit1Value Localhost
    注 : この値で既定のサーバーを指定します。ここには、任意の既定のサーバー名を入力できます。
    Edit2Label サービス名 :
    Edit2Value <サービス名>
    Edit3Visible False
    Edit4Visible False

    Edit1Property プロパティは "EDITA1" に、Edit2Property プロパティは "EDITA2" に設定されている点に留意してください。これらの値は、カスタム動作エディタの CustomActionData プロパティで入力した値と一致します。インストール中にユーザーがこれらの編集コントロールにテキストを入力すると、その値は CustomActionData プロパティによって自動的に渡されます。

ビルドとインストール

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

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

  • [ビルド] メニューの [<プロジェクト名> のビルド] をクリックします。<プロジェクト名> にはセットアップ プロジェクト名が表示されます。

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

  • ソリューション エクスプローラで目的のセットアップ プロジェクトを選択し、[プロジェクト] メニューの [インストール] をクリックします。

別のコンピュータ上の Web サーバーにアプリケーションを展開するには

  1. Windows エクスプローラでプロジェクトを格納したディレクトリに移動し、ビルトしたインストーラを見つけます。既定のパスは、\Documents and settings\<ログイン名>\<セットアップ プロジェクト名>\<プロジェクトの構成>\<製品名>.msi です。<プロジェクトの構成> の既定値は "Debug" です。
  2. .msi ファイル、ディレクトリ内の他のファイル、およびそのディレクトリのサブディレクトリを Web サーバーにすべてコピーします。
  3. Web サーバーで Setup.exe ファイルをダブルクリックして、インストーラを実行します。

まとめ

これまでの説明でわかるように、アプリケーションをリダイレクトして他の XML Web サービスを使用できるようにする手順は比較的簡単です。今回の例では XML Web サービスを対象とする Web アプリケーションを用いていますが、Windows アプリケーションにも容易にこの手順を適用できます。その場合は、Web.config ファイルの代わりに app.config ファイルを、Web セットアップ プロジェクトの代わりにセットアップ プロジェクトを処理します。その他の処理手順は同じです。

この例では、URL の動作プロパティを使用して構成ファイルの情報を格納する、インストーラ クラスを使用してインストール中に作業を行う、CustomActionData プロパティを使用してインストール中にユーザー情報を格納するなど、新しいテクニックをいくつか説明しました。