補正 (BizTalk Server サンプル)
補正サンプルは、オーケストレーションで 補正 図形を使用する方法を示しています。
このサンプルの処理
このサンプルでは、オーケストレーション内で既にコミットされたトランザクションを補正するため、次の一連の手順を実行します。
InfoPath フォームに顧客データを入力し、Web サービスとして公開されているオーケストレーションにデータを送信します。
オーケストレーションには 2 つの並列アクションがあり、 1 つ目の並列アクションでは InfoPath フォームに受信確認を返し、2 つ目の並列アクションでは Northwind および BTSCompensationSampleMailingList データベースを更新します。
2 番目のアクションでは、オーケストレーションによって受信メッセージが顧客関係管理 (CRM) アプリケーション メッセージ形式にマップされ、Northwind データベースの Customers テーブルが更新されます。 その後、BTSCompensationSampleMailingList データベースの Mailing List テーブルを更新します。
どちらかの更新が失敗した場合は、外部アセンブリを呼び出すことによって Northwind データベースへの変更を補正し、元の顧客データをデータベースに再度書き込みます。
このサンプルのデザイン方法とその理由
スコープ図形は、主にトランザクション実行と例外処理 (補正を含む) に使用されます。 スコープは 2 つのブロックで構成されます。 最初のブロックはコンテキスト ブロックであり、2 つ目のブロックは 1 つ以上の例外処理ブロックまたは補正ブロックです。 これは .NET プログラミング言語の try-catch ステートメントと類似しています。 UpdateContact.odx オーケストレーションには 2 つの並列アクションがあります。 右側の分岐にある try ブロックは、Long-Running トランザクションの種類とUpd_Backendトランザクション識別子を持つ Updated Backend Systems という名前の スコープ 図形です。 フロー下方の catch ブロックは一般的な例外をキャッチして補正を開始します。
[スコープ] 図形の詳細については、「スコープ」を参照してください。 「 スコープ図形を構成する方法」も参照してください。
Note
トランザクションの種類をアトミックまたは長時間トランザクションに設定するには、オーケストレーション自体が長時間トランザクションであることが必要です。
try ブロックには、 Update CRM と Update Mailing という名前の 2 つのスコープがあります。 これらのスコープはどちらもアトミック トランザクションです。 Update CRM スコープには try ブロックと補正ブロックがあります。 try ブロックでは外部アセンブリへのメソッド呼び出しによって Northwind データベースを更新し、 補正ブロックでは補正アクションを実行します。 Update Backend Systems スコープで例外が発生した場合は、Undo CRM 式図形内のコードによってレコードを元の状態に更新します。 これは、[例外のキャッチ] ブロックの [補正 ] 図形によってトリガーされます。
Note
アトミック トランザクションでは、トランザクション更新中にエラーが発生すると部分的な更新は自動的にロールバックされ、トランザクションの影響が除去されます。ただし、トランザクションで行われた .NET 呼び出しの影響は除去されません。
Note
長時間トランザクションは、その最後のステートメントが完了したときにコミットされたと見なされます。 トランザクションが中断された場合、状態の自動的なロールバックは行われません。 これは、このサンプルで示される例外処理および補正処理を使ったプログラムによって実現できます。
catch ブロックには、10 秒間の Delay 図形セットが 1 つあります。 補正アクションを遅らせる機能があります。 また、Upd_Backend トランザクションで補正アクションを開始する 補正 図形もあります。
オーケストレーションでは、入力メッセージを受信すると次の処理を実行します。
UpdateCrm アセンブリによって Northwind データベースの行を更新します。
UpdateMailingList アセンブリによって BTSCompensationSampleMailingList データベース内の一致するレコードを更新します。
Northwind データベースの更新で失敗した場合は例外を返し、処理を終了します。
BTSCompensationSampleMailingList データベースの更新で失敗した場合は例外を返し、10 秒経過後、元の顧客データを Northwind データベースに再度書き込みます。
このサンプルの場所
<サンプル パス>\Orchestrations\Compensation\
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
Cleanup.bat | サンプルのアンインストールに使用するバッチ ファイルです。 |
CompensationOrchestration.btproj | オーケストレーション プロジェクトです。 |
CompensationSample.sln | サンプル ソリューションです。 |
CompensationSampleBinding.xml | オーケストレーションのバインド データです。インストール中に使用されます。 |
ContactInfo.xsd | 担当者情報のメッセージ スキーマです。 |
ContactInfo.xsx | オーケストレーション デザイナーのレイアウト ファイルです。 |
CreateSQLDataStore.sql | サンプル データベースを作成してデータを取り込む SQL スクリプトです。 |
CrmSchema.xsd | CRM の更新メッセージ スキーマです。 |
MailingListSchema.xsd | メーリング リストのメッセージの更新スキーマです。 |
RemoveVirDir.vbs | Web サービスの仮想ディレクトリと物理ディレクトリを削除する、Microsoft Visual Basic Scripting Edition (VBScript) のスクリプトです。アンインストール中に使用されます。 |
Request2Crm.btm | 要求 (担当者情報) を CRM の更新メッセージに変換するメッセージ マップです。 |
Request2MailingList.btm | 要求 (担当者情報) をメーリング リストのメッセージに変換するメッセージ マップです。 |
Setup.bat | このサンプルをインストールするバッチ ファイルです。 |
UpdateContact.odx | オーケストレーション ファイルです。 |
UpdateRequest2UpdateResponse.btm | 要求 (担当者情報) を応答メッセージに変換するメッセージ マップです。 |
UpdateResponse.xsd | 応答メッセージ スキーマです。 |
InfoPath\Contact Info Update.xsn | オーケストレーション Web サービスにフォームを送信するために使用される Microsoft InfoPath ファイル。 |
UpdateCrm\AssemblyInfo.cs | UpdateCrm アセンブリ用のアセンブリ情報ソース ファイルです。 UpdateCrm アセンブリでは、Northwind データベースを更新します。 |
UpdateCrm\UpdateCrm.cs | UpdateCrm アセンブリのメインのソース コードです。 |
UpdateCrm\UpdateCRM.csproj | UpdateCrm プロジェクト ファイルです。 |
UpdateMailingList\AssemblyInfo.cs | UpdateMailingList アセンブリ用のアセンブリ情報ソース ファイルです。 UpdateMailingList アセンブリでは、サンプル データベースを更新します。 |
UpdateMailingList\UpdateMailingList.cs | UpdateMailingList アセンブリのメインのソース コードです。 |
UpdateMailingList\UpdateMailingList.csproj | UpdateMailingList プロジェクト ファイルです。 |
このサンプルのビルドと初期化
補正のサンプルをビルドおよび初期化するには
Visual Studio コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル パス>\Orchestrations\Compensation\
Setup.bat を実行します。処理内容は次のとおりです。
サンプル アセンブリをビルドおよび展開します。
BizTalk Web サービス公開ウィザードの起動時に、次の操作を手動で行います。
[ BizTalk Web サービス発行ウィザードへようこそ ] ページで、[ 次へ] をクリックします。
[ Web サービスの作成 ] ページで、[ BizTalk オーケストレーションを Web サービスとして発行する] を選択し、[ 次へ] をクリックします。
[BizTalk アセンブリ] ページで、[サンプル パス>]\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll を参照して選択<し、[次へ] をクリックします。
[ オーケストレーションとポート] ページで 、[ 次へ] をクリックします。
[ Web サービスのプロパティ] ページ の [Web サービスのターゲット名前空間] に「」と入力
http://Microsoft.BizTalk.Samples.Compensation/
し、[ 次へ] をクリックします。[ Web サービス プロジェクト ] ページの [ 場所] に「」と入力します
http://localhost/CompensationOrchestrationWebServiceProxy
。[Web サービスへの匿名アクセスを許可する] チェックボックスを選択します。
[Create BizTalk receive location in the following application チェック] ボックスを選択します。
次のアプリケーション の [ BizTalk 受信場所の作成 ] ドロップダウン メニューで、ドロップダウン リストから [BizTalk アプリケーション 1 ] を選択し、[ 次へ] をクリックします。
[ Web サービス プロジェクトの概要 ] ページで、[ 作成] をクリックします。
[ BizTalk Web サービス発行ウィザードの完了 ] ページで、[完了] をクリック します。
セットアップによりポートが作成およびバインドされ、サンプル用のバックエンド データベースが作成されます。さらに、C# アセンブリがグローバル アセンブリ キャッシュに追加されます。
Note
このサンプルを実行する前に、ビルドと初期化のプロセス中に BizTalk Server でエラーが報告されていないことを確認する必要があります。
このサンプルの実行
このサンプルをビルドおよび初期化したら、サンプルの実行前に次のことを考慮してください。
Windows Server 2008 SP2 または Windows Server 2008 R2 でこのサンプルを実行している場合は、IIS アプリケーション プールを作成し、その ID を BizTalk アプリケーション ユーザー Windows グループのメンバーであるアカウントに設定する必要があります。 また、オーケストレーションの Web サービスの仮想ディレクトリを更新し、このアプリケーション プール内で実行されるよう設定する必要があります。
BizTalk 分離ホスト ユーザー グループに ASPNET アカウントを追加します。
BizTalk Application Users グループに 、BTSCompensationSampleMailingList および Northwind データベースへのアクセス許可をdb_ownerします。
BizTalk Serverが既定の場所 (drive:\Program Files\Microsoft BizTalk Server <バージョン>\ にインストールされていない場合は、使用する前に連絡先情報 Update.xsn フォームを発行する必要があります。 これを行うには、次の操作を行います。
InfoPath フォームを公開するには
Internet Explorer で、[ツール] メニューの [インターネット オプション] をクリックします。
[ セキュリティ ] タブで、[ インターネット] をクリックし、[ カスタム レベル] をクリックします。
[ その他 ] セクションで、[ ドメイン間でデータ ソースにアクセス する] 設定が有効になっていることを確認し、[OK] をクリック します。 InfoPath ユーザー インターフェイス ソリューションのスクリプト コードを実行するには、この設定が必要です。
Windows エクスプローラーで、[サンプル パス>]\[オーケストレーション]\[補正]\InfoPath に移動<し、[連絡先情報 Update.xsn] を右クリックし、[デザイン] をクリックします。
InfoPath Contact Info Update ソリューションがデザイン モードで開きます。
InfoPath Contact Info Update アプリケーションの [ ファイル ] メニューの [ 発行] をクリックします。
発行ウィザードが表示されます。
[ このコンピューターまたはネットワーク上の共有フォルダーへ ] を選択し、ソリューションをパス <Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn に発行します。
デザイン モードの InfoPath を閉じます。
以上で、サンプルの実行準備が整いました。
補正のサンプルを実行するには
[連絡先情報 Update.xsn] をダブルクリックして InfoPath で開きます。
両方のデータベースに存在するアカウントのフォームに記入します。 たとえば、Northwind の Customers テーブルの既存のアカウント ID "ALFKI" を使用します。
[ ファイル ] メニューの [ 送信] を選択し、[ 送信] をクリックします。
応答ドキュメントは Samples Path>\Orchestrations\Compensation\Out フォルダーに<表示され、Northwind データベースと BTSCompensationSampleMailingList データベースの両方を InfoPath フォームの新しいデータで更新する必要があります。
Note
BTSCompensationSampleMailingList データベースを接続解除するか、オフラインにして、オーケストレーションで実行される補正アクションをテストできます。 Northwind データベースで先にレコードが更新されることを確認します。 その後、オーケストレーションが BTSCompensationSampleMailingList データベースを更新しようとすると、データベースが接続解除されているために、更新は失敗します。 したがって、例外が発行され、10 秒が経過した後に補正アクションが実行されて、元の顧客データが Northwind データベースに再度書き込まれます。
Note
"ユーザー 'IIS APPPOOL\DefaultAppPool' はログインできませんでした。" というエラーが発生する場合があります。 これは、トークンベースのサーバー アクセスの検証エラーが原因となっている可能性があります。 このエラーを解決するには、新しいアプリケーション プールを作成し、そのプールで管理アカウントを使用します。
このサンプルのアンインストール
補正のサンプルをアンインストールするには
Visual Studio コマンド ウィンドウで、次のフォルダーに移動します。
<サンプル パス>\Orchestrations\Compensation\
Cleanup.bat を実行します。