トランザクション アダプター (BizTalk Server サンプル)
Transactional Adapter サンプルは、BizTalk Server メッセージの処理中にデータベースに対して明示的な Microsoft 分散トランザクション コーディネータ (MSDTC) トランザクションを作成および使用する方法を示すものです。
このサンプルの処理
このサンプルには、MSDTC トランザクションを使用して SQL Server データベースからデータを取得するために、ユーザーが指定した間隔で SQL ステートメントを実行する受信アダプターが含まれています。 データは同じトランザクションのコンテキストでメッセージ形式で BizTalk Server メッセージ ボックス データベースに送信されます。
対応する送信アダプターは、トランザクションのコンテキストで BizTalk メッセージからの入力を使用してユーザー指定の SQL ストアド プロシージャを実行します。 そのメッセージからの特定のデータを使用して、同じトランザクションでメッセージ ボックス データベースから対応するメッセージを削除します。
このサンプルのデザイン方法とその理由
このサンプルのソリューションには 2 つのプロジェクトが含まれています。 1 つ目のプロジェクトは、ユーザーがこのアダプターを使用する受信場所と送信ポートを構成できるようにランタイムの前に使用される管理プロジェクト (Admin) です。 2 つ目のプロジェクトは、送信アダプターと受信アダプターの実行中に実行されるランタイム プロジェクト (Runtime) です。
このサンプルの場所
このサンプルは、SDK がある次の場所にあります。
<サンプル パス>\Samples\AdaptersDevelopment\TransactionalAdapter。 管理構成プロジェクトは \Admin フォルダーにあり、ランタイム プロジェクトは \Runtime フォルダーにあります。
次の表は、このサンプルのファイルとその目的を示しています。
管理プロジェクトのファイル名 | 管理プロジェクト ファイルの説明 |
---|---|
TransactionalAdmin.csproj | ランタイム前の構成に使用されるアダプター管理プロジェクト ファイル |
TransactionalReceiveHandler.xsd | 受信ハンドラー プロパティの XSD |
TransactionalReceiveLocation.xsd | 受信場所プロパティの XSD |
TransactionalTransmitLocation.xsd | 送信場所プロパティの XSD |
TransactionalTransmitHandler.xsd | 送信ハンドラー プロパティの XSD |
TransactionalAdapterManagement.cs | アダプター構成管理。 サポートされていると考えられる構成の種類 (4 種類) のそれぞれに XSD 構成スキーマを返すために、BizTalk アダプター フレームワークによって呼び出される GetConfigSchema を含んでいます。 |
ランタイム プロジェクトのファイル名 | ランタイム プロジェクト ファイルの説明 |
---|---|
Transactional.csproj | アダプター ランタイム プロジェクト ファイル |
TransactionalAsyncBatch.cs | アダプターの送信部分の非同期的な実装 |
TransactionalDeleteBatch.cs | メッセージ バッチを削除し、トランザクションをコミットまたは中断するように指定します |
TransactionalProperties.cs | 構成プロパティを抽出および設定します |
TransactionalReceiver.cs | 受信エンドポイントを作成および管理します |
TransactionalReceiverEndpoint.cs | 受信場所ごとの実際の受信待機またはポーリング |
TransactionalTransmitter.cs | メッセージ エンジンから送信されるメッセージ バッチを受け取ります |
このサンプルの使用方法
このサンプルは、明示的なトランザクションを使用してカスタムの送信アダプターと受信アダプターを作成するときに使用するフレームワークです。
このサンプルのビルドと初期化
重要
BizTalk 環境が 64 ビットである、またはインストール場所が変更されている場合は、それに合わせて OutboundAssemblyPath、InboundAssemblyPath、および AdapterMgmtAssemblyPath を変更する必要があります。
トランザクション アダプター サンプルの厳密な名前キーを作成する
Visual Studio コマンド プロンプトを起動します。
コマンド プロンプトで次のコマンドを入力し、Enter キーを押します。
cd \Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersDevelopment\TransactionalAdapter\Runtime
コマンド プロンプトで次のコマンドを入力し、Enter キーを押します。
sn –k TransactionalAdapter.snk
コマンド プロンプトで「 exit」と入力し、Enter キーを押してコマンド プロンプト ウィンドウを閉じます。
トランザクション アダプター ソリューションを構築する
[スタート] ボタンをクリックし、[すべてのプログラム] をポイントし、[アクセサリ] をポイントして、[Windows エクスプローラー] をクリックします。
\Program Files (x86)\Microsoft BizTalk Server <VERSION>SDK\Samples\AdaptersDevelopment\TransactionalAdapter を参照し、TransactionalAdapter.sln をダブルクリックして Visual Studio でこのソリューションを開きます。
ソリューション エクスプローラーでトランザクション アダプター プロジェクト (管理とランタイム) の両方をビルドするには、[ソリューション トランザクション][Adapter] を右クリックし、[再構築] をクリックします。
このサンプルの実行
トランザクション アダプターを登録する
Windows エクスプローラーで、\Program Files (x86)\Microsoft BizTalk Server <VERSION>SDK\Samples\AdaptersDevelopment\TransactionalAdapter\管理 に移動します。
トランザクション アダプター データをレジストリに追加するには、 TransactionalAdmin.reg をダブルクリックします。
Note
TransactionalAdmin.reg には、C:\Program Files\Microsoft BizTalk Server\ へのハードコーディングされたパスが含まれています。 既定の場所にBizTalk Serverをインストールしなかった場合、または以前のバージョンからBizTalk Serverインストールをアップグレードした場合は、適切なパスでファイル TransactionalAdmin.reg を変更する必要があります。 "InboundAssemblyPath"、"OutboundAssemblyPath"、および "AdapterMgmtAssemblyPath" の値に関連付けられたパスを、指定されたファイルの正しい場所を指すように更新します。
重要
BizTalk を 64 ビット コンピューターにインストールする場合は、HKEY_CLASSES_ROOT\CLSID\ レジストリ エントリのすべてのインスタンスを 、TransactionalAdmin.reg レジストリ ファイル内の HKEY_CLASSES_ROOT\Wow6432Node\CLSID\ に変更します。
[ レジストリ エディター ] ダイアログ ボックスで、[ はい ] をクリックしてサンプル アダプターをレジストリに追加し、[OK] をクリック します。
Windows エクスプローラーを閉じるには、[ファイル] をクリックし、[閉じる] をクリックします。
BizTalk Server へのトランザクション アダプターの追加
[スタート] メニューをクリックし、[すべてのプログラム] を選択し、[Microsoft BizTalk Server 20xx] を選択し、[BizTalk Server管理] を選択します。
[BizTalk Server管理] で、BizTalk Server管理ツリーを展開し、BizTalk グループ ツリーを展開して、[プラットフォーム設定] ツリーを展開します。
[ アダプター] を右クリックし、[ 新規] をクリックし、[ アダプター] をクリックします。
[ アダプターのプロパティ ] ダイアログ ボックスで、次の操作を行います。
プロパティ 目的 名前 「 TransactionalAdapter」と入力します。 アダプター ドロップダウン リストから [ Txn ] を選択します。 このエントリは、 前に TransactionalAdmin.reg ファイルを実行した結果として表示されます。 説明 「 サンプル トランザクション アダプター」と入力します。 [ OK] をクリックします 。BizTalk 管理コンソールの右側のウィンドウにアダプターの一覧にアダプターが表示されます。
アダプターを使用する受信ポートと受信場所の作成
[BizTalk Server管理] で BizTalk グループ [サーバー名] ノードを展開し、[アプリケーション] ノードを展開し、[BizTalk アプリケーション 1] ノードを展開します。
[受信ポート] を右クリックし、[新規] をクリックし、[一方向の受信ポート] を選択します。
[ 名前] に「 TxnReceivePort1」と入力し、[OK] をクリック します。
[ 受信場所 ] ノードを右クリックし、[ 新規] をクリックし、[ 一方向の受信場所] を選択します。
[受信ポートの選択 ] ダイアログ ボックスで、[ TxnReceivePort1] を選択し、[OK] をクリック します。
[ 受信場所のプロパティ ] ダイアログ ボックスの [ 全般 ] タブで、[名前] に 「TxnReceiveLocation1 」と入力 します。 [受信ポート] ラベルに TxnReceivePort1 が表示されていることを確認します。
[種類] ドロップダウン リスト ボックスの [トランスポート] フレームで、[TransactionalAdapter] を選択します。
[ 受信パイプライン ] ボックスで、 PassThruReceive が選択されていることを確認します。 残りのプロパティは既定の設定のままにします。
[種類] ドロップダウン ボックスの横にある [構成] ボタンをクリックします。 これにより、このアダプターに固有のダイアログが表示されます。 必要に応じて次を指定し、[OK] をクリック します。
プロパティ 設定 Connection String Northwind データベースとの接続と認証に使用される SQL データベース接続文字列。 後でこのデータベースを使用する SQL スクリプトを実行します。 コマンド テキスト Northwind データベースのデータを取得して BizTalk メッセージに格納するために、Northwind データベースに対して実行される SQL ステートメント。 クッキー URI の一部を構成します。受信場所の名前 (TxnReceiveLocation1 など) のような一意の名前を入力してください。 [ポーリング間隔の単位] データのポーリング時間の測定単位。 "秒" に設定します。 ポーリング間隔 データのポーリング時間を示す数値。 15 秒に設定します。 [OK] をクリックして [構成] ダイアログ ボックスを閉じ、もう一度 [OK] をクリックして [受信場所のプロパティ] ダイアログ ボックスを閉じ、BizTalk Server管理に戻ります。
アダプターを使用する送信ポートと送信ハンドラーの作成
BizTalk Application 1 ノードが引き続き展開されている状態で、[送信ポート] を右クリックし、[新規] をクリックし、[静的 One-Way 送信ポート] を選択します。
[ 名前 ] フィールドに「 TxnSendPort1」と入力します。
トランスポート フレームの [種類] ドロップダウン リストで、[トランザクション][Adapter] の選択
.
[ 送信パイプライン ] ボックスで、[ PassThruTransmit] が選択されていることを確認します。
トランスポート ドロップダウン リストの横にある [構成] ボタンをクリックします。表示されるダイアログで、必要に応じて次を指定し、[OK] をクリックします。
プロパティ 設定 クッキー URI の一部で構成される - 受信場所の名前など、一意の値をここに入力します (例: TxnSendPort1)。 Connection String Northwind データベースとの接続と認証に使用される SQL データベース接続文字列。 ほとんどの場合、 TxnReceiveLocation1 受信場所の構成に使用されるのと同じものになります。 ストアド プロシージャ データベースをポーリングするために実行されるストアド プロシージャ名 - sp_txnProc。 BizTalk メッセージの本文は、 という @Data文字列パラメーターとしてそのストアド プロシージャに渡されます。 たとえば、この場合、ユーザーは後でストアド プロシージャを sp_txnProc という名前で構成します。 アダプターのランタイムはデータベースに対しこの呼び出しと同等のものを実行します。
exec sp_txnProc @Data = "BizTalk メッセージの内容"左側のナビゲーション ウィンドウで、[フィルター] をクリック します。
フィルター式エディターで、次の式を入力してこの送信ポートのサブスクリプションを設定し、TxnReceivePort1 受信ポートから受信されるすべてのメッセージを受信します。
次の値を入力します:BTS。ReceivePortName== TxnReceivePort1
(property)
Bts。ReceivePortName(operator)
==(value)
TxnReceivePort1
アダプタープロパティの残りの部分には既定値を使用し、[ OK] を選択します。
サンプルを実行する
[スタート] をクリックし、[すべてのプログラム] をポイントし、[Microsoft SQL Server 2008 R2] をポイントし、[SQL Server Management Studio] を選択します。
[ サーバーへの接続 ] ダイアログ ボックスで、[ サーバーの種類 ] が [データベース エンジン] に設定されていることを確認し、データベース サーバーに対して認証するための資格情報を入力し、[ 接続] を選択します。
[ 新しいクエリ ] ツール バー ボタンを選択し、次を新しいクエリ ウィンドウに貼り付けて、テスト テーブル、テスト データ、テスト ストアド プロシージャを Northwind データベースに挿入します。 [ 実行 ] ツール バー ボタンを選択します。
use [Northwind] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[scratch]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[scratch] GO CREATE TABLE [dbo].[scratch] ( [id] [int] IDENTITY (1, 1) NOT NULL , [msg] [nvarchar] (4000) NOT NULL ) ON [PRIMARY] GO GRANT SELECT , UPDATE , INSERT ON [dbo].[scratch] TO [public] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_txnProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[sp_txnProc] GO CREATE PROCEDURE [dbo].[sp_txnProc] @Data nvarchar (4000) AS INSERT scratch ( msg ) values ( @Data ) GO GRANT EXECUTE ON [dbo].[sp_txnProc] TO [public] GO
[BizTalk Server管理] で、[送信ポート] ノードを展開し、TxnSendPort1 送信ポートを選択して、[開始] を選択します。
[BizTalk Server管理] で、[ReceiveLocations] ノードを展開し、[TxnReceiveLocation1] 受信場所を選択し、[有効] を選択します。
受信場所を有効にすると、指定された間隔で自動的にデータベースがポーリングされ、データが変更されているかどうかが判断されます。
サンプルで使用されるクラスまたはメソッド
IBTTransmitterBatch インターフェイス (COM)
IBTTransportProxy インターフェイス (COM)
これらのメソッドについては、 UI ガイダンスと開発者 API 名前空間リファレンスで説明されています。