BizTalk Serverを使用してSQL Serverからポーリング ベースのデータ変更メッセージを受信する
SQL アダプターを構成して、SQL Serverテーブルまたはビューの定期的なデータ変更メッセージを受信できます。 データベースをポーリングするためにアダプターが実行するポーリング ステートメントを指定できます。 ポーリング ステートメントには、SELECT ステートメント、または結果セットを返すストアド プロシージャを指定できます。
アダプターがポーリングをサポートする方法の詳細については、「ポーリングの サポート」を参照してください。 ポーリング操作用の SOAP メッセージの構造については、「 ポーリング操作と TypedPolling 操作のメッセージ スキーマ」を参照してください。
Note
このトピックでは、ポーリング受信操作を使用して ポーリング メッセージを使用する方法について説明します。 ポーリング操作のメッセージが厳密に型指定されておらず、ポーリングされるオブジェクトのスキーマが実行時にメッセージと共に取得されます。 厳密に型指定されたポーリング メッセージを取得する場合は、 TypedPolling 操作を使用する必要があります。 1 つの BizTalk アプリケーションで複数のポーリング操作を行うには、 TypedPolling 操作も使用する必要があります。 TypedPolling 操作を実行する方法については、「BizTalk Serverを使用してSQL Serverから厳密に型指定されたポーリング ベースのデータ変更メッセージを受信する」を参照してください。
重要
1 つの BizTalk アプリケーションで複数のポーリング操作を行う場合は、接続 URI の一部として InboundID 接続プロパティを指定して一意にする必要があります。 一意の接続 URI を使用すると、同じデータベース、またはデータベース内の同じテーブルをポーリングする複数の受信ポートを作成できます。 詳細については、「BizTalk Serverを使用して SQL から複数の受信ポート間でポーリング メッセージを受信する」を参照してください。
このトピックでポーリングを示す方法
このトピックでは、SQL アダプターがデータ変更メッセージの受信をサポートする方法を示すために、BizTalk プロジェクトを作成し、 ポーリング 操作のスキーマを生成します。 デザイン時にポーリング関連のバインド プロパティを指定する場合は、 PolledDataAvailableStatement を次のように指定します。
SELECT COUNT(*) FROM Employee
PolledDataAvailableStatement は、正の値を含む最初のセルで結果セットを返す必要があります。 最初のセルに正の値が含まれていない場合、アダプターはポーリング ステートメントを実行しません。
ポーリング ステートメントの一部として、次の操作を実行します。
Employee テーブルからすべての行を選択します。
ストアド プロシージャ (MOVE_EMP_DATA) を実行して、すべてのレコードを Employee テーブルから EmployeeHistory テーブルに移動します。
ストアド プロシージャ (ADD_EMP_DETAILS) を実行して、Employee テーブルに新しいレコードを追加します。 この手順では、従業員の名前、指定、給与をパラメーターとして受け取ります。
これらの操作を実行するには、 PollingStatement バインディング プロパティに次を指定する必要があります。
SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000
ポーリング ステートメントが実行されると、Employee テーブルのすべてのレコードが選択され、SQL Serverからのメッセージが受信場所にドロップされます。 MOVE_EMP_DATA ストアド プロシージャがアダプターによって実行されると、すべてのレコードが EmployeeHistory テーブルに移動されます。 次に、ADD_EMP_DETAILS ストアド プロシージャが実行され、Employee テーブルに新しいレコードが追加されます。 次のポーリング実行では、1 つのレコードのみが返されます。 このサイクルは、SQL Serverポーリングする受信ポートを無効にするまで続きます。
SQL アダプターのバインド プロパティを使用したポーリング クエリの構成
次の表は、データ変更メッセージを受信するようにアダプターを構成するために使用する SQL アダプターのバインド プロパティをまとめたものです。 BizTalk Server管理コンソールで受信ポートを構成するときに、これらのバインド プロパティを指定する必要があります。
Note
ポーリング操作のスキーマを生成するときに、必須ではない場合でも、これらのバインド プロパティを指定することもできます。 その場合、アダプター サービス アドインを使用してメタデータ生成の一部として生成されるポート バインド ファイルには、バインド プロパティに指定した値も含まれます。 このバインド ファイルは、後で BizTalk Server 管理コンソールにインポートして、バインド プロパティが既に設定されている WCF-custom または WCF-SQL 受信ポートを作成できます。 バインド ファイルを使用してポートを作成する方法の詳細については、「 SQL アダプターを使用するようにポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。
Binding プロパティ | 説明 |
---|---|
InboundOperationType | ポーリング、TypedPolling、または通知の受信操作を実行するかどうかを指定します。 既定値は ポーリングです。 |
PolledDataAvailableStatement | ポーリングに使用できるデータがあるかどうかを判断するためにアダプターが実行する SQL ステートメントを指定します。 SQL ステートメントは、行と列で構成される結果セットを返す必要があります。 行が使用可能な場合にのみ、 PollingStatement バインディング プロパティに指定された SQL ステートメントが実行されます。 |
PollingIntervalInSeconds | SQL アダプターが PolledDataAvailableStatement バインディング プロパティに指定されたステートメントを実行する間隔を秒単位で指定します。 既定値は 30 秒です。 ポーリング間隔は、連続するポーリング間の時間間隔を決定します。 ステートメントが指定された期間内に実行された場合、アダプターはその間隔の残りの時間を待機します。 |
PollingStatement | SQL Server データベース テーブルをポーリングする SQL ステートメントを指定します。 ポーリング ステートメントには、単純な SELECT ステートメントまたはストアド プロシージャを指定できます。 既定値は null です。 ポーリングを有効にするには、 PollingStatement の値を指定する必要があります。 ポーリング ステートメントは、ポーリングに使用できるデータがある場合にのみ実行されます。これは、 PolledDataAvailableStatement バインディング プロパティによって決定されます。 セミコロンで区切られた任意の数の SQL ステートメントを指定できます。 |
PollWhileDataFound | ポーリング対象のテーブルでデータが使用可能な場合に、SQL アダプターがポーリング間隔を無視し、 PolledDataAvailableStatement バインディング プロパティに対して指定された SQL ステートメントを継続的に実行するかどうかを指定します。 テーブルに使用可能なデータがない場合、アダプターは、指定されたポーリング間隔で SQL ステートメントを実行するように戻ります。 既定値は falseです。 |
これらのプロパティの詳細については、「BizTalk Adapter for SQL Server adapter Binding Properties」を参照してください。 SQL アダプターを使用してSQL Serverをポーリングする方法の詳細については、詳細を参照してください。
SQL Server データベースからデータ変更メッセージを受信する方法
BizTalk Serverで SQL アダプターを使用してSQL Server データベースに対して操作を実行するには、「Sql アダプターを使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手順に従います。 データ変更メッセージを受信するようにアダプターを構成するには、次のタスクを実行します。
BizTalk プロジェクトを作成し、 ポーリング 操作のスキーマを生成します。 必要に応じて、 PolledDataAvailableStatement および PollingStatement バインド プロパティの値を指定できます。
SQL Server データベースからメッセージを受信するためのメッセージを BizTalk プロジェクトに作成します。
SQL Server データベースからメッセージを受信し、フォルダーに保存するオーケストレーションを作成します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
重要
受信ポーリングのシナリオでは、常に一方向の WCF-Custom または WCF-SQL 受信ポートを構成する必要があります。 双方向 WCF-Custom または WCF-SQL 受信ポートは、受信操作ではサポートされていません。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する手順について説明します。
スキーマの生成
ポーリング操作のスキーマを生成する必要があります。 スキーマの生成方法の詳細については、「SQL アダプターを使用した Visual Studio でのSQL Server操作のメタデータの取得」を参照してください。 スキーマを生成するときは、次のタスクを実行します。 デザイン時にバインド プロパティを指定しない場合は、最初の手順をスキップします。
スキーマの生成中 に、PolledDataAvailableStatement および PollingStatement バインド プロパティの値を指定します。 このバインディング プロパティの詳細については、「BizTalk Adapter for SQL Server adapter Binding Properties」を参照してください。
バインド プロパティを指定する方法については、「 SQL アダプターのバインド プロパティを構成する」を参照してください。
コントラクトの種類を [サービス (受信操作)] として選択します。
ポーリング操作のスキーマを生成します。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 スキーマが生成されたら、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。
このトピックでは、SQL Server データベースからメッセージを受信するメッセージを 1 つ作成する必要があります。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーから BizTalk プロジェクト名を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。
BizTalk プロジェクトがまだ開いていない場合は、オーケストレーション ビュー ウィンドウを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
プロパティ 目的 識別子 「 Receive」と入力します。 メッセージ型 ドロップダウン リストから [ スキーマ] を展開し、 PollingQuery.Polling を選択します。 PollingQuery は BizTalk プロジェクトの名前です。 ポーリング は、 ポーリング 操作用に生成されたスキーマです。
オーケストレーションの設定
SQL Server データベースからポーリング ベースのデータ変更メッセージを受信するためにBizTalk Serverを使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、アダプターは PollingStatement バインディング プロパティに指定された select ステートメントの応答を受け取ります。 SELECT ステートメントの応答は FILE の場所に保存されます。 SQL Server データベースをポーリングするための一般的なオーケストレーションには、次のものが含まれます。
SQL Serverからメッセージを受信し、それぞれ FILE ポートに送信する図形を受信および送信します。
SQL Serverからメッセージを受信する一方向の受信ポート。
重要
受信ポーリングのシナリオでは、常に一方向の受信ポートを構成する必要があります。 双方向の受信ポートは、受信操作ではサポートされていません。
SQL Server データベースからフォルダーにポーリング応答を送信する一方向の送信ポート。
サンプル オーケストレーションは次のようになります。
SQL Server データベース を
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、単一のオーケストレーションに表示されるメッセージ図形の名前です。
図形 | 図形の種類 | プロパティ |
---|---|---|
ReceiveMessage | 受信 | - 名前を ReceiveMessage に設定する - Activate をTrue に設定する |
SaveMessage | Send | - 名前を SaveMessage に設定する |
ポートの追加
論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
Port | プロパティ |
---|---|
SQLReceivePort | - 識別子を SQLReceivePort に設定する - 型を SQLReceivePortType に設定する - 通信パターンを一方向に設定する - 受信する通信方向を設定する |
SaveMessagePort | - 識別子を SaveMessagePort に設定する - Type を SaveMessagePortType に設定する - 通信パターンを一方向に設定する - [通信の方向] を [送信] に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定する必要があるプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。
図形 | プロパティ |
---|---|
ReceiveMessage | - メッセージを受信に設定する - 操作を SQLReceivePort.Polling.Request に設定する |
SaveMessage | - メッセージを受信に設定する - SaveMessagePort.Polling.Request に操作を設定する |
これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。
BizTalk ソリューションをビルドし、BizTalk Serverに展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。
BizTalk アプリケーションの構成
BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが、BizTalk Server管理コンソールの [オーケストレーション] ウィンドウの下に一覧表示されます。 アプリケーションを構成するには、BizTalk Server管理コンソールを使用する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。
アプリケーションの構成には、次の作業が含まれます。
アプリケーションのホストの選択。
オーケストレーションで作成したポートを、BizTalk Server管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。
ハード ディスク上の場所と、BizTalk オーケストレーションがSQL Server データベースからメッセージを削除する対応するファイル ポートを定義します。 これらのメッセージは、受信ポートに指定したポーリング ステートメントに応答します。
物理 WCF-Custom または WCF-SQL の一方向受信ポートを定義します。 このポートは、ポートに指定したポーリング ステートメントを使用して、SQL Server データベースをポーリングします。 ポートを作成する方法については、「 SQL アダプターへの物理ポート バインドを手動で構成する」を参照してください。 受信ポートには、次のバインド プロパティを指定してください。
重要
デザイン時にバインド プロパティを指定した場合は、この手順を実行する必要はありません。 このような場合は、アダプター サービスアドインによって作成されたバインド ファイルをインポートすることで、必要なバインド プロパティを設定して、WCF-custom または WCF-SQL 受信ポートを作成できます。 詳細については、「 SQL アダプターを使用するようにポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。
Binding プロパティ 値 InboundOperationType これを [ ポーリング] に設定していることを確認します。 PolledDataAvailableStatement SQL ステートメントを指定してください。 このトピックでは、次のように指定します。
SELECT COUNT(*) FROM Employee
PollingStatement ポーリング ステートメントを指定してください。 このトピックでは、次のように指定します。
SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000
さまざまなバインド プロパティの詳細については、「BizTalk Adapter for SQL Server Adapter Binding Properties」を参照してください。
Note
SQL アダプターを使用して受信操作を実行するときに、トランザクション分離レベルとトランザクション タイムアウトを構成することをお勧めします。 これを行うには、WCF-Custom または WCF-SQL 受信ポートの構成中にサービスの動作を追加します。 サービスの動作を追加する方法については、「SQL を使用して トランザクション分離レベルとトランザクション タイムアウトを構成する」を参照してください。
アプリケーションの起動
SQL Server データベースからメッセージを受信するには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。
この段階で、次のことを確認します。
WCF-Custom または WCF-SQL の一方向の受信ポートは、PollingStatement バインディング プロパティに指定されたステートメントを使用してSQL Server データベースをポーリングします。
SQL Serverからメッセージを受信する FILE 送信ポートが実行されています。
操作の BizTalk オーケストレーションが実行されています。
操作の実行
アプリケーションを実行すると、次の一連のアクションが同じ順序で実行されます。
アダプターは、Employee テーブルで PolledDataAvailableStatement を実行し、テーブルにポーリング用のレコードがあることを判断します。
アダプターはポーリング ステートメントを実行します。 ポーリング ステートメントは SELECT ステートメントとストアド プロシージャで構成されるため、アダプターはすべてのステートメントを 1 つずつ実行します。
アダプターはまず、Employee テーブル内のすべてのレコードを返す SELECT ステートメントを実行します。
その後、アダプターは、Employee テーブルから EmployeeHistory テーブルにすべてのデータを移動するMOVE_EMP_DATAストアド プロシージャを実行します。 このストアド プロシージャは値を返しません。
その後、アダプターは、Employee テーブルに 1 つのレコードを追加するADD_EMP_DETAILSストアド プロシージャを実行します。 このストアド プロシージャは、挿入されたレコードの従業員 ID を返します。
そのため、SQL Serverから受信したメッセージには、複数の結果セット (SELECT ステートメントとストアド プロシージャの場合ADD_EMP_DETAILS) が含まれており、次のようになります。
<?xml version="1.0" encoding="utf-8" ?> <Polling xmlns="http://schemas.microsoft.com/Sql/2008/05/Polling/"> <PolledData> <DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element msdata:IsDataSet="true" name="NewDataSet"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="Employee_ID" type="xs:int" /> <xs:element minOccurs="0" name="Name" type="xs:string" /> <xs:element minOccurs="0" name="DOJ" type="xs:dateTime" /> <xs:element minOccurs="0" name="Designation" type="xs:string" /> <xs:element minOccurs="0" name="Job_Description" type="xs:string" /> <xs:element minOccurs="0" name="Photo" type="xs:base64Binary" /> <xs:element minOccurs="0" name="Rating" type="xs:string" /> <xs:element minOccurs="0" name="Salary" type="xs:decimal" /> <xs:element minOccurs="0" name="Last_Modified" type="xs:base64Binary" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <NewTable> <Employee_ID>10001</Employee_ID> <Name>John</Name> <Designation>Tester</Designation> <Salary>100000.00</Salary> <Last_Modified>AAAAAAAAF34=</Last_Modified> </NewTable> ........ ........ <NewTable> <Employee_ID>10005</Employee_ID> <Name>Wilson</Name> <Designation>Tester3</Designation> <Salary>100000.00</Salary> <Last_Modified>AAAAAAAAF4E=</Last_Modified> </NewTable> </NewDataSet> </diffgr:diffgram> </DataSet> <DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element msdata:IsDataSet="true" name="NewDataSet"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="Employee_ID" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet xmlns=""> <NewTable> <Employee_ID>10006</Employee_ID> </NewTable> </NewDataSet> </diffgr:diffgram> </DataSet> </PolledData> </Polling>
上記の応答には、2 つのデータ セットが含まれています。 最初のデータ・セットには、SELECT ステートメントの応答が含まれています。 SELECT ステートメントは、Employee テーブル内のすべてのレコードを選択します。 2 番目のデータ セットは、ADD_EMP_DETAILS ストアド プロシージャ用です。 このストアド プロシージャは、Employee テーブルにレコードを追加し、新しいレコードの従業員 ID を返します。
Note
MOVE_EMP_DATA ストアド プロシージャは結果セットを返しません。 そのため、応答メッセージに対応するデータ セットはありません。
アダプターは 、PollDataAvailableStatement をもう一度実行すると、ADD_EMP_DETAILS ストアド プロシージャによって挿入された 1 つのレコードを検索します。 その後、アダプターは 、PollingStatement バインディング プロパティに指定された 3 つのステートメントをすべて実行します。 今回は、SQL Serverからの応答には、SELECT ステートメントのレコードと、ADD_EMP_DETAILS ストアド プロシージャのレコードが 1 つだけ含まれます。 それ以降のすべてのポーリングでは、同様の応答が返されます。
Note
SQL アダプターは、BizTalk Server管理コンソールから受信ポートを明示的に無効にするまでポーリングを続行します。
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、バインド ファイルと呼ばれる XML ファイルに構成設定をエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートと受信ポートを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「アダプター バインドの 再利用」を参照してください。