Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > ステップ 7 > Visual Studio 2005 による分散アプリケーション開発編 > 第 5 回 分散アプリケーションの開発

ステップ 7 ハンズオン 「Visual Studio 2005 による分散アプリケーション開発編」

第 5 回 分散アプリケーションの開発

分散システムの構築

マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部
エバンジェリスト 辻郷 隆史

最終更新日 2006 年 2 月 8 日

目標 分散システム構築および考慮点の確認
使用技術
  • Visual Studio 2005 / Visual Basic 2005
  • .NET Framework 2.0
  • SQL Server 2005
  • Windows Server 2003 / IIS 6.0 / Active Directory
取り上げるトピックス
  • 分散アプリケーションの配置とアプリケーション構成ファイルの利用方法
  • 分散アプリケーションでの各種セキュリティの利用方法
前提知識

分散システムの構築

前回までに作成した分散アプリケーション "イベント 2005" を各サーバーへ配置し、分散システム環境を構築します。

今回は下記の分散システム環境を構築することにし、各システム環境を構築する際の考慮点などを順に確認していきます。

図 1.分散システム

下記の認証については、 ActiveDirectory による認証を実施します。

  • アプリケーション サーバー ⇔ データベース サーバー間の認証 (Windows 認証)
  • クライアント (および Web サーバー ) / Web サービスの認証 (基本認証)
サーバー種別ドメイン参加アプリケーション
データベース サーバー参加データベース
アプリケーション サーバー参加データアクセス コンポーネント
ビジネス コンポーネント
サービス コンポーネント
Web サーバー不参加Web アプリケーション
クライアント不参加Windows アプリケーション

なお、プロファイル取得処理などについては、今回のサンプルアプリケーションでは扱っていないため、ハードコーディングを行っている部分が存在します。

そのため、実際の配置する環境に応じて、下記の 3 箇所について事前にアプリケーションのコードを修正およびビルドしておく必要があります。

  1. 第 3 回 ビジネス層の開発 - その 2 サービス コンポーネント開発」/ Step5
  2.         ' プロファイル取得
            Dim profileID As Integer
            If Context.User.Identity.Name = "ドメイン名\ユーザー名" Then
                profileID = 18
            End If
    
  3. 第 4 回 プレゼンテーション層の開発 - その 1 Web アプリケーション開発」/ Step4
  4.     Public Sub New()
            ' 認証情報設定
            nc = New System.Net.NetworkCredential("ユーザー名", "パスワード", "ドメイン名")
        End Sub
    
  5. 第 4 回 プレゼンテーション層の開発 - その 2 Windows アプリケーション開発」/ Step4
  6.     Public Sub New()
            ' 認証情報設定
            nc = New System.Net.NetworkCredential("ユーザー名", "パスワード", "ドメイン名")
        End Sub
    

[ Active Directory ユーザーとコンピュータ ] 管理ツールにて、組織単位 “Event2005” を作成し、その組織単位内に Web サービスアプリケーションの実行ユーザー “EventWS” およびクライアントの認証用ユーザー “User01” を作成します。

種類ユーザー ログオン名用途
組織単位 (OU)Event2005下記のユーザーの管理にて使用 (必須ではありません。)
ユーザーEventWSWeb サービス アプリケーション実行ユーザー
(IIS ワーカープロセス 実行アカウント)
ユーザーUser01クライアント認証用ユーザー
(Web サービス アプリケーション 基本認証で使用)

Active Directory でのユーザー作成方法などについては Active Directory ステップバイステップ ガイド / ステップバイステップ ガイド : Active Directory の管理 などを参照ください。

データベース サーバー上へデータベース “Event2005DB” を作成後、 Web サービス アプリケーション実行ユーザーから “Event2005DB” へアクセスできるようにセキュリティの設定を行います。

[ SQL Server Management Studio ] を起動し、 [ オブジェクト エクスプローラ ] より [ (SQL Server インスタンス名) ] - [ セキュリティ ] - [ ログイン ] を選択後、右クリックにてコンテキストメニューより [ 新しいログイン] を選択します。

[ ログイン - 新規作成 ] ダイアログにて [ Windows 認証 ] のラジオボタンが選択されていることを確認後、ログイン名へ “MYCOMPANY\EventWS” (ドメイン名\ユーザー名) を入力します。

図 2. 新しいログイン “EventWS”

更に [ ログイン - 新規作成 ] ダイアログにて、 左上の [ ページの選択 ] ペイン内の [ ユーザー マッピング ] を選択後、 “Event2005DB” のマップおよびロール メンバシップ “db_datareader” / “db_datawriter” をチェックし、”EventWS” ユーザーが “Event2005DB” へ読み込みおよび書き込みが出来るように権限を設定します。

図 3. ユーザー マッピング

※ “Event2005DB” の作成については、 「第 2 回 データ層の開発 - その 1 データベースの作成」を参照ください。

アプリケーション サーバー上へサービス コンポーネント (+ビジネス コンポーネント+データアクセス コンポーネント) を配置および Web サービス アプリケーションに関する各種設定を下記の順序で行います。

  1. サービス コンポーネント 配置
  2. Web.config 設定
  3. “EventWS” 権限設定
  4. アプリケーション プール作成
  5. 仮想ディレクトリ作成
  6. アプリケーション プールの設定
  7. 基本認証および SSL 通信設定

なお、今回はフォルダコピーによる配置 (XCOPY 配置) および IIS の管理コンソールによる各種設定を行います。

A. サービス コンポーネント 配置

サービス コンポーネントをフォルダ毎 (C:\Inetpub\wwwroot\EventSV など) アプリケーションサーバー上 (C:\Inetpub\wwwroot\EventSV など) へコピーします。

B. Web.config 設定

アプリケーション構成ファイル (EventSV \Web.config) へデータベースへの接続文字列を設定します。

<-xml version="1.0"->
<!-- 
  メモ: このファイルを手動で編集する代わりに、Web 管理ツールを使用 
  …
  machine.config.comments で確認できます。 
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings/>
  <connectionStrings>
    <add name="EventDA.My.MySettings.Event2005DBConnectionString"
    connectionString="Data Source=DBSRV;Initial Catalog=Event2005DB;Integrated Security=True" />
  </connectionStrings>
  <system.web>
  …
プロパティ上記設定設定内容
プロパティ上記設定設定内容
Data SourceDBSRV接続するデータベースサーバー名
Initial CatalogEvent2005DB接続するデータベース名
Integrated SecurityTRUEWindows 認証を使用

C. “EventWS” 権限設定

Web サービス アプリケーション実行ユーザー “EventWS” を IIS 6.0 ワーカープロセスで使用するために、アプリケーション サーバー ローカル グループ “IIS_WPG” のメンバーへ “EventWS” ユーザーを追加します。

[ コンピューターの管理 ] 管理ツールを起動し、左ペインより [ コンピュータの管理 ] - [ ローカル ユーザーとグループ ] - [ グループ ] を選択後、右ペインより “IIS_WPG” をダブルクリックし、 [ IIS_WPG のプロパティ ] ダイアログを表示します。

[ 追加 ] ボタンをクリックし、“MYCOMPANY\EventWS” (ドメイン名\ユーザー名) をメンバーへ追加します。

図 4. “IIS_WPG” メンバーへの追加

※ Web サービスを使用する場合、 ASP.NET のプロセス ID と要求 ID に記載されている通り、 %windir%\temp フォルダを Web サービス シリアル化関連処理で使用します。

今回のように IIS_WPG メンバーでワーカープロセスを実行している場合、%windir%\temp フォルダに対するアクセス許可が IIS_WPG についてはデフォルトで設定されていないため、 Web サービスの呼び出しに失敗します。

%windir%\temp フォルダに対して “NETWORK SERVICE” と同レベルのアクセス許可を与える必要があります。

D. アプリケーション プール作成

新しいアプリケーション プールを作成し、実行ユーザーとして “EventWS” を設定します。

[ インターネット インフォメーション サービス (IIS) マネージャ ] を起動し、左ペインより [ インターネット インフォメーション サービス ] - [ (ローカルコンピュータ) ] - [ アプリケーション プール ]を選択後、右クリックにてコンテキスト メニューより [ 新規作成 ] - [ アプリケーション プール ] を選択し、 [ 新しいアプリケーション プールの追加 ] ダイアログを表示します。

ダイアログにて、[ アプリケーション プール ID ] へ “EventWSAppPool” を設定し新規アプリケーション プールを作成します。

図 5. 新規アプリケーション プール “EventWSAppPool” 作成

次に、作成した “EventWSAppPool を右クリック後、コンテキスト メニューより [ プロパティ ] を選択し [ EventWSAppPool のプロパティ] ダイアログを表示します。

[ 識別 ] タブにてアプリケーション プール ID のラジオボタン [ 構成可能 ] を選択後、ユーザー名およびパスワードへ “MYCOMPANY\EventWS” (ドメイン名\ユーザー名) およびパスワードを入力し、アプリケーション プール ID (アプリケーション プール 実行ユーザー) を設定します。

図 6. アプリケーション プール ID 設定

E. 仮想ディレクトリ作成

サービス コンポーネントのフォルダを仮想ディレクトリとして設定します。

[ インターネット インフォメーション サービス (IIS) マネージャ ] 左ペインより [ インターネット インフォメーション サービス ] - [ (ローカルコンピュータ) ] - [ Web サイト ] - [ 既定の Web サイト ] を選択後、右クリックにてコンテキスト メニューより [ 新規作成 ] - [ 仮想ディレクトリ ] を選択し、 [ 仮想ディレクトリの作成ウィザード ] ダイアログを表示します。

ウィザード形式のダイアログにて、下記の項目を設定します。

  • エイリアスは “EventSV”
  • パスへはサービス コンポーネントのコピー先(C:\Inetpub\wwwroot\EventSV など)
  • 仮想ディレクトリのアクセス許可については、”読み取り” および “ASP などのスクリプトを実行する” をチェック

F. アプリケーション プールの設定

作成した仮想ディレクトリのアプリケーション プールを “EventWSAppPool” に設定します。

“EventSV” 仮想ディレクトリを右クリック後、コンテキスト メニューより [ プロパティ ] を選択し [ EventSV のプロパティ] ダイアログを表示します。

[ 仮想ディレクトリ ] タブにて [ アプリケーション プール ] の値を “EventWSAppPool” に設定します。

図 7. 仮想ディレクトリ / アプリケーション プール設定

G. 基本認証および SSL 通信設定

作成した Web サイト "EventSV" への基本認証および SSL 通信の設定を行います。

基本認証の設定方法については、「10 行でズバリ !! Web サービスの認証 (VB)」などを参照ください。

基本認証を使用する場合は、パスワードなどの認証情報がクリアテキストが渡されるため、必ず SSL 通信などと併せて使用してください。 IIS にて SSL 通信を使用する場合は、サーバー証明書を始めとする各種設定が必要となります。詳細については 「セキュリティテスト用 SSL サーバーの構築 - ステップ バイ ステップ」 などを参照ください。

Web サーバー上へ Web アプリケーションを配置および Web アプリケーションに関する各種設定を下記の順序で行います。

  1. Web アプリケーション配置
  2. Web.config 設定
  3. 仮想ディレクトリ作成

a. Web アプリケーション配置

Web アプリケーションをフォルダ毎 (C:\Inetpub\wwwroot\EventUIWeb など) Web サーバー上 (C:\Inetpub\wwwroot\EventUIWeb など) へコピーします。

b. Web.config 設定

アプリケーション構成ファイル (EventUIWeb\Web.config) へ Web サービスの URL を設定します。

<-xml version="1.0"->
<!-- 
    メモ: このファイルを手動で編集する代わりに、Web 管理ツールを使用 
    …
    machine.config.comments で確認できます。 
-->
    <configuration>
    <appSettings>
    <add key="SessionEntryWS.SessionEntry" value="https://APPSRV/EventSV/SessionEntry.asmx"/>
    </appSettings>
    …

c. 仮想ディレクトリ作成

Web アプリケーションのフォルダを仮想ディレクトリとして設定します。

[ インターネット インフォメーション サービス (IIS) マネージャ ] 左ペインより [ インターネット インフォメーション サービス ] - [ (ローカルコンピュータ) ] - [ Web サイト ] - [ 既定の Web サイト ] を選択後、右クリックにてコンテキスト メニューより [ 新規作成 ] - [ 仮想ディレクトリ ] を選択し、 [ 仮想ディレクトリの作成ウィザード ] ダイアログを表示します。

ウィザード形式のダイアログにて、下記の項目を設定します。

  • エイリアスは “EventUIWeb”
  • パスへは Web アプリケーションのコピー先 (C:\Inetpub\wwwroot\EventUIWeb など)
  • 仮想ディレクトリのアクセス許可については、”読み取り” および “ASP などのスクリプトを実行する” をチェック

クライアントへ Windows アプリケーションを配置および Web サービスの URL の設定を行います。

クライアント上に “EventUIWeb.exe” および “EventUIWeb.exe.config” ファイルをコピー後、“EventUIWeb.exe.config” ファイル内の Web サービスの URL を設定します。

<configuration>
    …
    <applicationSettings>
        <EventUIWin.My.MySettings>
            <setting name="EventUIWin_SessionEntryWS_SessionEntry" serializeAs="String">
                <value>https://192.168.0.10/EventSV/SessionEntry.asmx</value>
            </setting>
        </EventUIWin.My.MySettings>
    …

ここまでで、分散アプリケーションの各サーバーへの配置および設定が完了しました。

アプリケーションを実行し正常に動作することを確認します。

このステップでは通信方式について今回実施した内容も含め再度確認します。

今回はアプリケーション構成ファイルを使用し、通信先のサーバー名などの設定を下記の通り実施しています。

図 8. アプリケーション構成ファイル設定項目

分散アプリケーションの通信方式としては、クライアント (および Web サーバー) とアプリケーション間では Web サービス、アプリケーション サーバーとデータベース サーバー間では SQL Server プロトコルを使用して通信を行い、いずれの通信も同期 / ステートレス (複数の呼び出しに亘りステートを保持しない) の方式で実施しています。

図 9. 通信方式

このステップではセキュリティ方式について今回実施した内容も含め再度確認します。

今回は Active Directory / SQL Server / IIS のプラットフォームが提供している各種セキュリティに関する設定を下記の通り実施しています。

図 10. セキュリティ概要

Active Directory については、アプリケーション サーバーとデータベース サーバー間の認証およびクライアント (および Web サーバー) とアプリケーション サーバーの認証の用途で使用しています。

SQL Server / IIS については、その用途に沿った形での設定を実施しています。

クライアントについては、今回はハードコーディングで固定ユーザーを使用していますが、実際にはユーザー名およびパスワードなどの入力を要求し、認証情報として直接的または間接的に利用するなどを行います。

図 11. 認証方式

※基本認証ではユーザー名およびパスワードがクリアテキストでネットワーク上に流れるので、必ず SSL 通信などの暗号化された通信を使用する必要があります。

まとめ

このように、分散システムの構築を行う場合は、システム全体に亘る通信方式やセキュリティ方式などを考慮する必要があります。

分散アプリケーションの開発を行う場合、システムで採用する通信方式およびセキュリティ方式に応じた実装を行うと同時に、コンポーネント化による特定方式への依存部分の局所化や、柔軟な物理配置へ対応するためのアプリケーション構成ファイルの適切な使用などにより、再利用性が高いアプリケーションを構築することが可能です。

.NET アプリケーション アーキテクチャ

マイクロソフトでは、 .NET アプリケーション アーキテクチャ というガイダンスを公開しており、今回のステップ 7 シリーズで紹介した内容も含め、.NET で分散アプリケーションを構築するための各種ガイダンスが掲載されていますので、ぜひご参照ください。

参考情報

Windows Server 2003 と Internet Information Services (IIS) 6.0 でのアプリケーションの分離構成
ASP.NET と IIS の構成


Top of Page Top of Page

Microsoft