方法: 既知のメッセージ タイプに関するビジネス ルール ポリシーを利用し、コンテンツベースのルーティングを実装する
目標
このセクションでは、ビジネス ルール ポリシーを使用して、既知のメッセージの種類 (Microsoft BizTalk Server 構成データベースに展開されたスキーマ) の内容に基づいて、メッセージを動的にルーティングするスケジュールを作成する方法について説明します。
このハウツー トピックでは、次の手順を実行します。
コンテンツに基づいてメッセージをルーティングするために使用されるビジネス ルール ポリシーを作成します。
BRE リゾルバーを使用して、メッセージを動的にルーティングするスケジュール ルーティング スリップを作成します。
スケジュール テスト クライアント サンプル アプリケーションを使用して、スケジュールをテストします。
前提条件
このハウツー トピックの手順では、 開発アクティビティの前提条件を完了する必要があります。
はじめに
この操作方法に関するトピックで後述する手順を実行する前に、次のタスクを完了してください。
GlobalBank West テスト メッセージを作成します。
GlobalBank East テスト メッセージを作成します。
次の手順では、これらのそれぞれを実行する方法について説明します。
GlobalBank West テスト メッセージを作成するには
Windows エクスプローラーで、C:\HowTos に移動します。
NAOrderDoc.xml のコピーを作成し、コピーに West.xml という名前を付けます。
メモ帳で West.xml を開き、 customerName 要素の値を GlobalBankWest に変更します。
West.xml UTF-8 として保存し、メモ帳を閉じます。
GlobalBank East テスト メッセージを作成するには
Windows エクスプローラーで、C:\HowTos に移動します。
NAOrderDoc.xml のコピーを作成し、コピーに East.xml という名前を付けます。
メモ帳で、East.xml を開き、 customerName 要素の値を GlobalBankEast に変更します。
East.xml UTF-8 として保存し、メモ帳を閉じます。
手順
カスタム メッセージ プロパティを使用してルーティングする BRE ポリシーを作成するには
この規則では、顧客の名前を使用して、メッセージのルーティングに使用されるエンドポイントを動的に設定します。
タスク バーの [スタート] をクリックし、[すべてのプログラム] をポイントし、[BizTalk Server] をポイントして、[ビジネス ルール作成ツール] をクリックします。
[ポリシー エクスプローラー] で、[ポリシー] を右クリックし、[新しいポリシーの追加] をクリックします。 ポリシーに RouteBasedOnCustomerKnownType という名前を付けます。
顧客 GlobalBank West のルーティング規則を追加するには
RouteBasedOnCustomerKnownType ポリシーで、[バージョン 1.0 (保存されていません)] を右クリックし、[新しい規則の追加] をクリックします。 ルールに SetWestEndpoint という名前を付けます。
[ファクト] エクスプローラーで、[XML スキーマ] タブをクリックし、[スキーマ] を右クリックし、[参照] をクリックします。
[ スキーマ ファイル ] ダイアログ ボックスで、C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB に移動します。DynamicResolution.Schemas を選択し、[ NAOrderDoc.xsd] を選択し、[ 開く] をクリックします。
Note
これは、テストに使用する西と東のメッセージを作成するために使用された NAOrderDoc.xml メッセージを定義するスキーマです。
ファクト エクスプローラーで、[NAOrderDoc.xsd] をクリックし、[プロパティ] ウィンドウで [ドキュメントの種類] プロパティをクリックし、「GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc」と入力します。
Note
これはスキーマの完全修飾名です。
[ファクト] エクスプローラーで、[NAOrderDoc.xsd] を展開し、[OrderDoc] を展開します。
[ルール] ウィンドウで [ 条件] を右クリックし、[ 述語] をポイントして、[ 等しい] をクリックします。
ファクト エクスプローラーから、customerName 要素を [条件] の下の argument1 ノードにドラッグします。
argument2 ノードをクリックし、「GlobalBankWest」と入力します。
[ファクト] エクスプローラーで、[ボキャブラリ] タブをクリックし、[ESB] を展開します。EndPointInfo、 [バージョン 1.0] の順に展開します。
Note
Microsoft BizTalk ESB Toolkit には、ESB で使用するルールを作成するために使用できるいくつかのボキャブラリが含まれています。 これらの一部は、独自のボキャブラリに置き換えるか、拡張する必要があります。 たとえば、 DynamicRunTimeMaptypes には、 GlobalBank サンプルで提供されているマップの定義があります。
[ファクト] エクスプローラーから、[エンドポイントの送信トランスポートの場所の設定] 定義を [アクション] にドラッグします。
空の文字列>をクリック<し、「C:\HowTos\Out\West%MessageID%.xml」と入力します。
[ファクト] エクスプローラーから、[エンドポイントの送信トランスポートの種類の設定] 定義を [アクション] にドラッグします。
[ファクト] エクスプローラーで、[ESB] を展開します。TransportTypes、バージョン 1.0 を展開し、アダプター プロバイダーの定義を空の文字列に<ドラッグします>。
[ 操作 ] ウィンドウで、[ アダプター プロバイダー ] ドロップダウン リストを展開し、[ ファイル] をクリックします。
顧客 GlobalBank East のルーティング規則を追加するには
[ポリシー エクスプローラー] で、SetWestEndpoint ルールを右クリックし、[コピー] をクリックします。
[バージョン 1.0 (保存されていません)] を右クリックし、[貼り付け] をクリックします。
[ 新しい規則名 ] ダイアログ ボックスで、「 SetEastEndpoint」と入力し、[OK] をクリック します。
[ポリシー エクスプローラーで、SetEastEndpoint ルールをクリックします。
[ 条件 ] セクションで、[ GlobalBankWest] を右クリックし、[ 引数のリセット] をクリックします。
argument2 をクリックし、「GlobalBankEast」と入力します。
[ アクション] セクションで、 C:\HowTos\Out\West%MessageID%.xmlを右クリックし、[ 引数のリセット] をクリックします。
空の文字列>をクリック<し、「C:\HowTos\Out\East%MessageID%.xml」と入力します。
不明な顧客のルーティング規則を追加するには
RouteBasedOnCustomerKnownType ポリシーで、[バージョン 1.0 (保存されていません)] を右クリックし、[新しい規則の追加] をクリックします。 ルールに SetUnknownCustomerEndpoint という名前を付けます。
[ルール] ウィンドウで、[条件] を右クリックし、[論理 AND の追加] をクリックします。
[ルール] ウィンドウで、[AND] を右クリックし、[述語] をポイントし、[NotEqual] をクリックします。
[ファクト] エクスプローラーで、[XML スキーマ] タブをクリックし、[NAOrderDoc.xsd] を展開し、[OrderDoc] を展開します。
ファクト エクスプローラーから、customerName 要素を [条件] の下の argument1 ノードにドラッグします。
argument2 ノードをクリックし、「GlobalBankWest」と入力します。
[ルール] ウィンドウで、[AND] を右クリックし、[述語] をポイントし、[NotEqual] をクリックします。
ファクト エクスプローラーから、customerName 要素を [条件] の下の argument1 ノードにドラッグします。
argument2 ノードをクリックし、「GlobalBankEast」と入力します。
[ファクト] エクスプローラーで、[ボキャブラリ] タブをクリックし、[ESB] を展開します。EndPointInfo、 [バージョン 1.0] の順に展開します。
[ファクト] エクスプローラーから、[エンドポイントの送信トランスポートの場所の設定] 定義を [アクション] にドラッグします。
[空の文字列>] をクリック<し、「C:\HowTos\Out\CustomerUnknown%MessageID%.xml」と入力します。
[ファクト] エクスプローラーから、[エンドポイントの送信トランスポートの種類の設定] 定義を [アクション] にドラッグします。
[ファクト] エクスプローラーで、[ESB] を展開します。TransportTypes、バージョン 1.0 を展開し、アダプター プロバイダーの定義を空の文字列に<ドラッグします>。
[操作] ウィンドウで、[アダプター プロバイダー] ドロップダウン リストを展開し、[ファイル] をクリックします。
ポリシーを発行して展開するには
[ポリシー エクスプローラー] の RouteBasedOnCustomerKnownType ポリシーで、[バージョン 1.0 (保存されていません)] を右クリックし、[発行] をクリックします。
[ポリシー エクスプローラー] の RouteBasedOnCustomerKnownType ポリシーで、[バージョン 1.0 - 発行済み] を右クリックし、[展開] をクリックします。
ESB スケジュール DSL モデルを作成するには
Visual Studio で、C:\HowTos\Patterns\Patterns.sln を開きます。
ソリューション エクスプローラーで、ItineraryLibrary プロジェクトを右クリックし、[追加] をポイントして、[新しいスケジュール] をクリックします。
[ 新しい項目の追加 ] ダイアログ ボックスの [名前 ] ボックスに「 CbrKnownType」と入力し、[ 追加] をクリックします。
スケジュールのプロパティを構成するには
Visual Studio で、 CbrKnownType.itinerary のデザイン画面をクリックします。 CbrKnownType プロパティ ウィンドウで、次のプロパティを構成します。
[ モデル エクスポーター ] ドロップダウン リストで、[ XML スケジュール エクスポーター] をクリックします。
[ エクステンダー設定] セクションの [ スケジュール XML ファイル ] プロパティの横にある省略記号ボタン (...) をクリックします。
[XML ファイルの選択] ダイアログ ボックスで、[ファイル名] ボックスに「C:\HowTos\Itineraries\CbrKnownType」と入力し、[保存] をクリックします。
Note
この手順では、スケジュールを XML としてローカル ファイルの場所にエクスポートできます。 スケジュール をスケジュール データベースではなくローカル ファイルの場所にエクスポートすることで、ESB テスト クライアント アプリケーションを使用して旅程のテストを行えます。 このプロセスは、このハウツー トピックの後半で完了します。
旅程の構造を定義するには
ツールボックスから、 On-Ramp モデル要素をデザイン サーフェイスにドラッグします。 OnRamp1 プロパティ ウィンドウで、次のプロパティを構成します。
Name プロパティをクリックし、「ReceiveNAOrder」と入力します。
[ エクステンダー ] ドロップダウン リストで、[ On-Ramp ESB エクステンダー] をクリックします。
[BizTalk アプリケーション] ドロップダウン リストで、[Microsoft.Practices.ESB] をクリックします。
[ 受信ポート ] ドロップダウン リストで、[ OnRamp.Itinerary] をクリックします。
ツールボックスから 、Off-Ramp モデル要素をデザインサーフェイスにドラッグし、 ReceiveNAOrder モデル要素の右側に配置します。 OffRamp1 プロパティ ウィンドウで、次のプロパティを構成します。
[名前] プロパティをクリックし、「SendRegionalOrders」と入力します。
[ エクステンダー ] ドロップダウン リストで、[ Off-Ramp ESB エクステンダー] をクリックします。
[BizTalk アプリケーション] ドロップダウン リストで、[GlobalBank.ESB] をクリックします。
[ 送信ポート ] ドロップダウン リストで、[ DynamicResolutionOneWay] をクリックします。
ツールボックスから、 Itinerary Service モデル要素をデザインサーフェイスにドラッグし、 ReceiveNAOrder モデル要素と SendRegionalOrders モデル要素の間に配置します。 ItineraryService1 プロパティ ウィンドウで、次のプロパティを構成します。
[名前] プロパティをクリックし、「SendPortFilter」と入力します。
[ スケジュール サービス エクステンダー ] ドロップダウン リストで、[ オフランプ エクステンダー] をクリックします。
[ オフランプ ] ドロップダウン リストで、[ SendRegionalOrders] を展開し、[ハンドラーの 送信] をクリックします。
SendPortFilter モデル要素の Resolver コレクションを右クリックし、[新しい競合回避モジュールの追加] をクリックします。 Resolver1 プロパティ ウィンドウで、次のプロパティを構成します。
Name プロパティをクリックし、「RouteRegionalOrders」と入力します。
[ トランスポート名 ] ドロップダウン リストで、[ BRE] をクリックします。
[ リゾルバーの実装 ] ドロップダウン リストで、[ Bre Resolver Extension]\(リゾルバー拡張機能の作成\) をクリックします。
[ ポリシー ] ドロップダウン リストで、[ RouteBasedOnCustomerKnownType] をクリックします。
[ メッセージ形式の認識 ] ドロップダウン リストで、[ True] をクリックします。
[ UseMsg ] ドロップダウン リストで、[True] をクリック します。
Note
オーケストレーションから BRE リゾルバー拡張機能を使用する場合は、 recognizeMessageFormat プロパティを False に設定する必要があります。
ツールボックスで、[ コネクタ] をクリックします。 ReceiveNAOrder モデル要素から SendPortFilter モデル要素に接続をドラッグします。
ツールボックスで、[ コネクタ] をクリックします。 接続を SendPortFilter モデル要素から SendRegionalOrders モデル要素にドラッグします。
スケジュール テスト クライアントで使用するモデルをエクスポートするには
Visual Studio で、 CbrKnownType スケジュールのデザイン画面を右クリックし、[ モデルのエクスポート] をクリックします。
Note
スケジュールの XML バージョンが Visual Studio で開きます。
すべてのプロジェクト成果物を保存します。
Windows エクスプローラーで、C:\HowTos\Itineraries に移動し、旅程 XML (CbrKnownType.xml) の作成に注目します。
スケジュールとビジネス ルールをテストするには
開発アクティビティの前提条件 (C:\HowTos\ESB.Itinerary.Test.exe - ショートカット) の間に作成されたショートカットを使用して、Itinerary Test Client サンプル アプリケーションを開きます。
[スケジュール テスト クライアント] で、[WCF サービス チェックを使用する] ボックスをオフにし、[スケジュールの読み込み] をクリックします。
[ スケジュール ファイルを開く ] ダイアログ ボックスで、C:\HowTos\Itineraries に移動します。 [CbrKnownType.xml] を選択し、[開く] をクリックして旅程を読み込みます。
[ OK] をクリックして 、 スケジュールが正常に読み込まれた というメッセージをクリアします。
[スケジュール テスト クライアント] で、[ メッセージの読み込み ] ボックスの横にある省略記号ボタン (...) をクリックします。
[ 読み込む XML ドキュメントの選択 ] ダイアログ ボックスで、C:\HowTos を参照します。 [West.xml] を選択し、[開く] をクリックしてテスト メッセージを読み込みます。
[ 要求の送信] ボタンをクリックします。 テストが完了したら、[ OK] をクリックして 、表示される確認を閉じます。
Windows エクスプローラーで、C:\HowTos\Out に移動します。West%MessageID%.xml メッセージがディレクトリに書き込まれたことを確認します。
East.xml メッセージを使用してテスト プロセスを繰り返します。
Windows エクスプローラーで、C:\HowTos\Out に移動します。East%MessageID%.xml メッセージがディレクトリに書き込まれたことを確認します。
NAOrderDoc.xml メッセージを使用してテスト プロセスを繰り返します。
Windows エクスプローラーで、C:\HowTos\Out に移動します。CustomerUnknown%MessageID%.xml メッセージがディレクトリに書き込まれたことを確認します。
その他のリソース
詳細については、次の関連項目を参照してください。