チュートリアル:XML エンベロープの使用 (基本)
この例では、架空のエラー追跡システムを実装して、基本的な XML エンベロープの逆アセンブルを示します。 この例は次の要件を満たしています。
エラー メッセージは社内のさまざまな物理的な場所でログに記録され、集中管理された場所に送信されて、さまざまなバックエンド システムに振り分けられます。
エラー メッセージは XML 形式で書き込まれます。
エラー メッセージは、エンベロープなしで単独に送信したり、エンベロープに含まれるバッチとして送信したりできます。
前提条件
この例では、BizTalk プロジェクトの作成、アセンブリへの署名、BizTalk Server 管理コンソールでのアプリケーションとポートの表示に慣れている必要があります。 また、「 チュートリアル: 基本的な BizTalk アプリケーションを展開する」で説明されているアイデアに慣れる必要もあります。
この例の処理
この例では、エンベロープ スキーマを定義し、XmlDisassembler パイプラインを使用して、単一のエラー メッセージまたはエラー メッセージのバッチを含む受信メッセージを処理します。
例
この例を作成するには、以下で概要を説明している手順を実行します。
新しい BizTalk プロジェクトの作成
BizTalk プロジェクトを作成する必要があるソリューションをビルドする前に、ソリューションに厳密な名前が付いていることを確認し、アプリケーション名をそのソリューションに割り当てます。 アプリケーション名を割り当てると、そのソリューションが BizTalk Server によって既定の BizTalk アプリケーションに配置されるのを防ぐことができます。
新しい BizTalk プロジェクトを作成および構成するには
Visual Studio を使用して新しい BizTalk プロジェクトを作成します。 プロジェクト BasicXMLEnvelope を呼び出します。
キー ファイルを作成してプロジェクトに割り当てます。 このタスクの詳細については、「 厳密な名前のアセンブリ キー ファイルを構成する方法」を参照してください。
プロジェクトのデプロイ構成プロパティで、 アプリケーション名 を割り当て、[ ホスト インスタンスの再起動] を に
True
設定します。 このフラグを設定すると、キャッシュされたアセンブリのインスタンスを消去するようにホストに通知されます。
エラー スキーマの作成
このステップではエラー スキーマを作成します。 システムのキー メッセージを定義します。
エラー スキーマを作成するには
プロジェクトに "エラー" という名前の新しいスキーマを追加します。
スキーマのターゲット名前空間を に http://BasicXMLEnvelope変更します。
スキーマ プロパティ [詳細] カテゴリの下にある [要素 FormDefault] を [修飾] に変更します。 これは、ローカルに宣言された要素を、ターゲットの名前空間を使用してインスタンス ドキュメント内で修飾する必要があることを示します。
ルート ノードの名前を "エラー" に変更し、次に示す型の 5 つの子要素を作成します。
ID、xs:int 型
Type、xs:int 型
Priority、xs:string 型
Description、xs:string 型
ErrorDateTime、xs:string 型
スキーマは以下のようになります。
このスキーマに対応するサンプル メッセージを作成します。 このメッセージは、エンベロープの外部の単一メッセージが適切に処理されているかどうかを確認するために使用します。 以下に、サンプル メッセージの例を示します。
<Error xmlns="http://BasicXMLEnvelope"> <ID>1</ID> <Type>5</Type> <Priority>Low</Priority> <Description>Sprocket widget prints reports slowly.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error>
このメッセージをプロジェクト ディレクトリ内のファイルに保存します。
エンベロープ スキーマの作成
エンベロープには、1 つ以上のエラー メッセージが格納されます。 この基本の例のエンベロープには、独自のプロパティおよび要素がありません。
エンベロープ スキーマを作成するには
BasicXMLEnvelope プロジェクトに "エンベロープ" という名前の新しいスキーマを追加します。
ターゲット名前空間を に http://BasicXMLEnvelope変更します。
ルート ノードの名前を "ルート" から "エンベロープ" に変更します。
次に、スキーマをエンベロープ スキーマとしてマークします。 [スキーマ>] ノードを<クリックします。 [プロパティ] ウィンドウで、スキーマ参照プロパティ Envelope を に
OK
設定します。Body XPath プロパティを設定します。 これを行うには、[ 封筒 ] ノードをクリックします。 プロパティ ウィンドウで、Body XPath プロパティの省略記号 (...) ボタンをクリックし、[封筒] を選択し、[OK] をクリックします。
[エンベロープ] ノードにすべての子要素を追加します。 この要素にエラー メッセージが含まれます。 スキーマは以下のようになります。
エンベロープと 1 つ以上のサンプル メッセージを含むサンプル メッセージを作成します。 以下に、メッセージの例を示します。
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
このメッセージをプロジェクト ディレクトリ内のファイルに保存します。
受信ポートと送信ポートの配置および構成
スキーマを作成したら、次はプロジェクトをコンパイルして配置する必要があります。 プロジェクトを配置すると、BizTalk Server 管理コンソールを使用して、送信ポートと受信ポートを構成できます。
BasicXMLEnvelope を配置するには
Visual Studio で、[ビルド] メニューの [ Deploy BasicXMLEnvelope ] を選択します。 この操作により、BizTalk Server に "BasicXMLEnvelope" アプリケーションとしてビルドおよび配置されます。
BizTalk Server管理コンソールで、[アプリケーション] グループを展開して、BasicXMLEnvelope がカスタム アプリケーションとして存在することを確認します。
受信ポートを構成するには
Windows エクスプローラーを使用して、BasicXMLEnvelope プロジェクト ディレクトリの下に "Receive" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを展開し、[受信ポート] を右クリックし、[新規] をポイントして、[一方向の受信ポート] をクリックします。
[ 受信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を "Receive" に設定します。
[受信場所] を右クリックし、[ 新規 ] をクリックして受信ポートを追加します。 新しいポートに "ReceiveError" という名前を付けます。 受信パイプラインを XMLReceive に設定します。 [ トランスポートの種類] で [ ファイル] を選択し、[ 構成] をクリックします。
上記で作成した受信ディレクトリを選択し、[OK] をクリック します。 受信ポートが正しく構成されます。 [OK] をクリックして閉じます。
送信ポートを構成するには
Windows エクスプローラーを使用して、BasicXMLEnvelope プロジェクト ディレクトリの下に "Send" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを展開し、[送信ポート] を右クリックし、[新規] をポイントして、[静的一方向] をクリックします。
[ 送信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を [送信] に設定します。
[ トランスポートの種類] で [ ファイル] を選択し、[ 構成] をクリックします。 宛先フォルダーを先ほど作成した送信ディレクトリに設定し、[OK] をクリック します。
[ フィルター] をクリックし、1 つのフィルターを追加します。
- Bts。MessageType == http://BasicXMLEnvelope#Error
[ OK] を クリックして送信ポートの構成を完了します。 送信ポートが正しく構成されます。
例の実行
次に、例を実行します。 BizTalk Server 管理コンソールを使用して BasicXMLEnvelope アプリケーションを起動した後、テスト ファイルを受信場所にコピーして、送信場所に生成される内容を観察します。
BasicXMLEnvelope 例を実行するには
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを右クリックし、[開始] をクリックします。 これにより、送信ポートと受信ポートが参加し、開始されます。
各サンプル ファイルを受信ディレクトリに置きます。 上記のサンプルを使用する場合は、処理された後、送信場所で 3 つの各エラー メッセージを探します。
例の拡張
この例は、他の要件に合わせて拡張できます。 このセクションでは、2 つの一般的なシナリオを取り上げます。
エラーのバッチがエンベロープで送信される場合、逆アセンブルでの個別のメッセージの失敗によって、失敗でないメッセージの処理が停止しないようにする必要があります。
エラーは、優先度に基づいて異なる場所に配信する必要があります。 優先度の高いメッセージは迅速に処理され、それ以外の優先度のメッセージは通常のチャネルで処理されます。
次のセクションでは、例を拡張してこれらの要件に適合させます。
回復可能なインターチェンジ処理
BizTalk Serverは、回復可能なインターチェンジ処理をサポートします。 この機能を使用すると、逆アセンブル時のメッセージのバッチの失敗がバッチとしてではなく、個別に発生するように設定できます。
回復可能なインターチェンジ処理の例を構成するには
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを展開し、[受信ポート] をクリックして、[受信ポート] をダブルクリックします。 これは既に作成したポートです。
[ 受信ポートのプロパティ ] ダイアログ ボックスで、[ 受信場所] をクリックします。 [ プロパティ ] をクリックして[ ReceiveError Receive Location Properties]\(受信エラー受信場所のプロパティ\ ) ダイアログ ボックスを表示します。 受信パイプラインの省略記号 (...) ボタンをクリックします。
[ パイプラインの構成 - XMLReceive ] ダイアログ ボックスで、[ 回復可能なインターチェンジ処理 ] プロパティを に
True
設定し、[OK] をクリック します。[ OK] を クリックして [ 受信場所のプロパティ ] ダイアログ ボックスを閉じ、[ OK] を クリックして [ 受信ポートのプロパティ ] ダイアログ ボックスを閉じます。
サンプル ファイルを作成して例を実行するには
サンプル ファイルを作成するには、例で作成したエンベロープ サンプル ファイルのコピーを作成し、存在しない名前空間を Error インスタンスの 1 つに追加してファイルを保存します。
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails to return any sprockets even though some exist</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error xmlns="http://ThisIsAnError"> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
BizTalk Server管理コンソールで、[アプリケーション] をクリックし、BasicXMLEnvelope アプリケーションが実行されていることを確認します。
受信場所にメッセージをドロップします。 処理後、送信場所で最初のメッセージを探し、保留キューで 2 番目のメッセージや優先度の低いメッセージを探します。
コンテンツ ベースのルーティング (CBR)
コンテンツ ベースのルーティングを使用すると、コンテンツに基づいてメッセージをルーティングできます。 このシナリオでは、優先度が “高” のメッセージは 1 つの送信場所に送られ、優先度が "中" または "低" のメッセージは別の送信場所に送られるという優先度に基づいたルーティングが行われます。
サンプルを拡張するには、次の作業を行う必要があります。
BasicXMLEnvelope プロジェクトのエラー スキーマの [優先度 ] フィールドを昇格します。 コンテンツ ベースのルーティングでは、メッセージのルーティングに昇格させたプロパティが必要です。 詳細については、「プロパティの 昇格」を参照してください。
2 つの追加の送信ポートを作成および構成します。 これらのポートでは、適切なメッセージを受信するためにフィルターを使用します。
[エラー] スキーマの "優先度" フィールドを昇格させるには
Visual Studio で BasicXMLEnvelope プロジェクトを開いた状態で、 エラー スキーマを開き、[ エラー ] ノードを展開します。
Priority 要素を右クリックし、[昇格] をポイントして、[クイック プロモート] をクリックします。
[ OK] を クリックして、昇格されたプロパティの新しいプロパティ スキーマの追加を確認します。
Visual Studio のソリューション エクスプローラーで、新しいプロパティ スキーマ PropertySchema.xsd を開きます。 スキーマから "Field1" を削除します。
次に、ソリューションを再コンパイルして再配置します。 [ビルド] メニューの [BasicXMLEnvelope の配置] を選択します。
プロジェクトは、ソリューションが再配置されるときにホスト インスタンスを再設定するように構成されました。 これを変更した場合、ホストを停止して開始する必要があります。
優先度が低または中程度の送信ポートを構成するには
Windows エクスプローラーを使用して、BasicXMLEnvelope プロジェクト ディレクトリの下に "SendLowMediumPriority" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを展開し、[送信ポート] を右クリックし、[新規] をポイントして、[静的一方向] をクリックします。
[ 送信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を "SendLowMediumPriority" に設定します。
[ トランスポートの種類] で [ ファイル] を選択し、[ 構成] をクリックします。 送信先のフォルダーを、先ほど作成したディレクトリに設定します。 [OK] をクリックして閉じます。
[ フィルター] をクリックし、次の 3 つのフィルター式を追加します。
Bts。MessageType == http://BasicXMLEnvelope#Error And
BasicXMLEnvelope.PropertySchema.Priority == Low Or
BasicXMLEnvelope.PropertySchema.Priority == Medium
[ OK] をクリックして 、低優先度と中優先度の送信ポート構成を完了します。
優先度の高い送信ポートを構成するには
Windows エクスプローラーを使用して、BasicXMLEnvelope プロジェクト ディレクトリの下に "SendHighPriority" という名前のディレクトリを作成します。
BizTalk Server管理コンソールで、BasicXMLEnvelope アプリケーションを展開し、[送信ポート] を右クリックし、[新規] をポイントして、[静的一方向] をクリックします。
[ 送信ポートのプロパティ ] ダイアログ ボックスで、ポートの名前を "SendHighPriority" に設定します。
[ トランスポートの種類] で [ ファイル] を選択し、[ 構成] をクリックします。 送信先のフォルダーを、先ほど作成したディレクトリに設定します。 [OK] をクリックして閉じます。
[ フィルター] をクリックし、次の 2 つのフィルター式を追加します。
Bts。MessageType == http://BasicXMLEnvelope#Error And
BasicXMLEnvelope.PropertySchema.Priority == High
[ OK] をクリックして 、優先度の高い送信ポートの構成を完了します。
ソリューションのルーティングをテストするには
BizTalk Server管理コンソールで、[アプリケーション] グループを展開し、BasicXMLEnvelope アプリケーションを右クリックし、[開始] をクリックします。 確認を求められたら、[ 開始] をクリックします。 これにより、新しい送信ポートが参加します。
受信場所にテスト メッセージをドロップします。 エラー メッセージが異なる送信場所にルーティングされていることに注意してください。
優先度が低、中、または高に設定され、メッセージ処理を失敗していないエラー メッセージは、元の送信場所 (基本例で構成されています) と優先度に基づく送信場所の両方にルーティングされます。 優先度が低または中に設定されたメッセージでは、元の送信場所と優先度が低または中の送信場所の両方にコピーが表示されます。
回復可能なインターチェンジ処理が有効になっている場合、失敗したエラー メッセージのルーティングは行われませんが、失敗しなかったメッセージは想定どおり適切にルーティングされます。 失敗したメッセージがルーティングされないのは、そのメッセージの種類と、構成したフィルターで使用される種類が一致しないためです。