Von Bedeutung
簡潔にするために、このトピックでは、通知を段階的に受信する方法についてのみ説明します。 ビジネス シナリオでは、受信した通知メッセージの種類を抽出し、後続の操作を実行するロジックをオーケストレーションに含めるのが理想的です。 つまり、 BizTalk Server を使用して SQL で特定のタスクを実行するには、「通知メッセージの処理」で説明されているオーケストレーションの上に、このトピックで説明されているオーケストレーションを構築する必要があります。
このトピックでは、SQL Server データベースから増分クエリ通知メッセージを受信するように SQL アダプターを構成する方法について説明します。 増分通知を示すには、"Status" 列を含むテーブル Employee を検討してください。 このテーブルに新しいレコードが挿入されると、Status 列の値は 0 に設定されます。 増分通知を受信するようにアダプターを構成するには、次の手順を実行します。
Status 列が 0 のすべてのレコードを取得する SQL ステートメントを使用して通知に登録します。 これを行うには、 NotificationStatement バインディング プロパティに SQL ステートメントを指定します。
通知メッセージが受信された行の場合は、[状態] 列を 1 に更新します。
このトピックでは、BizTalk オーケストレーションを作成し、これを実現するために BizTalk アプリケーションを構成する方法について説明します。
SQL アダプターのバインド プロパティを使用した通知の構成
次の表は、SQL Server からの通知の受信を構成するために使用する SQL アダプターのバインド プロパティをまとめたものです。 BizTalk Server 管理コンソールで受信ポートを構成するときに、これらのバインド プロパティを指定する必要があります。
注
必須ではありませんが、 通知 操作のスキーマを生成するときに、これらのバインド プロパティを指定することもできます。 その場合、アダプターサービスアドインがメタデータ生成の一部として生成するポート バインド ファイルにも、バインド プロパティに指定した値が含まれます。 このバインド ファイルは、後で BizTalk Server 管理コンソールにインポートして、既に設定されているバインディング プロパティを使用して WCF カスタムまたは WCF-SQL 受信ポートを作成できます。 バインド ファイルを使用してポートを作成する方法の詳細については、「 ポート バインド ファイルを使用して SQL アダプターを使用するように物理ポート バインドを構成する」を参照してください。
バインディングプロパティ | 説明 |
---|---|
InboundOperationType | 実行する受信操作を指定します。 通知メッセージを受信するには、これを [通知] に設定します。 |
NotificationStatement | クエリ通知の登録に使用する SQL ステートメント (SELECT または EXEC < ストアド プロシージャ>) を指定します。 アダプターは、指定された SQL ステートメントの結果セットが変更された場合にのみ、SQL Server から通知メッセージを取得します。 |
NotifyOnListenerStart | リスナーの起動時にアダプターがアダプター クライアントに通知を送信するかどうかを指定します。 |
これらのプロパティの詳細については、BizTalk Adapter for SQL Server アダプターのバインド プロパティに関する情報をご覧ください。 SQL アダプターを使用して SQL Server から通知を受信する方法の詳細については、詳細を参照してください。
このトピックで通知メッセージの受信方法を示す方法
SQL アダプターが SQL Server からの通知メッセージの受信をサポートする方法を示すために、このトピックでは、Employee テーブルへの変更の通知を受信するようにアダプターを構成する方法について説明します。 Employee テーブルにEmployee_ID、名前、および状態の列があるとします。 新しい従業員が追加されるたびに、Status 列の値は 0 に設定されます。
通知の受信を示すには、次の操作を行います。
Employee テーブルの 通知 (受信操作) と 選択 (送信操作) のスキーマを生成します。
次のようなオーケストレーションを作成します。
通知メッセージを受信する受信場所。 通知用に構成するには、SELECT ステートメントを次のように指定します。
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
注
この SELECT ステートメントに示すように、ステートメントで列名を具体的に指定する必要があります。 また、テーブル名とスキーマ名を常に指定する必要があります。 たとえば、
dbo.Employee
のようにします。通知が既に送信されている行を更新する送信ポート。 これを行うには、[状態] 列の値を 1 に設定します。 これは、アダプターに次のメッセージを送信することで、選択操作の一部として行うことができます。
<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <Columns>Employee_ID,Name,Status</Columns> <Query>where Status=0;UPDATE Employee SET Status=1 WHERE Status=0</Query> </Select>
このメッセージでは、
<Query>
要素の一部として、Update ステートメントを指定して Status 列を更新します。 この操作は、処理された行が更新されるように、通知メッセージを受信した後に実行する必要があることに注意してください。 通知の応答を待ってから手動でリクエストメッセージを送信して行を更新する手間を省くために、オーケストレーション内で行を更新するためのリクエストメッセージを生成します。 これを行うには、オーケストレーション内で メッセージの構築 図形を使用します。
SQL Server データベースから通知メッセージを受信する方法
BizTalk Server で SQL アダプターを使用して SQL Server データベースに対して操作を実行するには、「SQL アダプターを使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手続き型タスクが含まれます。 通知メッセージを受信するようにアダプターを構成するには、次のタスクを実行します。
BizTalk プロジェクトを作成し、Employee テーブルの 通知 (受信操作) と 選択 (送信操作) のスキーマを生成します。 必要に応じて、 InboundOperationType および NotificationStatement バインド プロパティの値を指定できます。
SQL Server データベースから通知を受信するためのメッセージを BizTalk プロジェクトに作成します。
SQL Server データベースの Select 情報を実行し、応答メッセージを受信するためのメッセージを BizTalk プロジェクトに作成します。
次の処理を行うオーケストレーションを作成します。
SQL Server から通知メッセージを受信します。
通知を受信する行を選択して更新するメッセージを作成します。
このメッセージを SQL Server に送信して行を更新し、応答を受信します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
注
受信用の操作では、通知メッセージの受信など、一方向の WCF-Custom または WCF-SQL 受信ポートのみを構成する必要があります。 双方向 WCF-Custom または WCF-SQL 受信ポートは、受信操作ではサポートされていません。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する手順について説明します。
このトピックに基づくサンプル
このトピックに基づく IncrementalNotification のサンプルは、BizTalk アダプター パックで提供されています。 詳細については、 SQL アダプターのサンプルを参照してください。
スキーマの生成
Employee テーブルの 通知 操作と 選択 操作のスキーマを生成する必要があります。 スキーマの生成方法の詳細については、 SQL アダプターを使用した Visual Studio での SQL Server 操作のメタデータの取得 に関するページを参照してください。 スキーマを生成するときは、次のタスクを実行します。 デザイン時にバインド プロパティを指定しない場合は、最初の手順をスキップします。
スキーマの生成中に InboundOperationType および NotificationStatement バインド プロパティの値を指定します。 このバインディング プロパティの詳細については、「 BizTalk Adapter for SQL Server アダプターのバインド プロパティの読み取り」を参照してください。 バインディング プロパティを指定する方法については、「 SQL アダプターのバインド プロパティを構成する」を参照してください。
契約の種類として サービス(インバウンド業務) を選択します。
通知操作のスキーマを生成します。
コントラクトの種類として クライアント (送信操作) を選択します。
Employee テーブルの Select 操作のスキーマを生成します。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 スキーマが生成されたら、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。
このトピックでは、3 つのメッセージを作成する必要があります。1 つは SQL Server データベースから通知を受信し、1 つは Select 操作を実行し、1 つは Select 操作の応答を受信します。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーで、BizTalk プロジェクト名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。
まだ開いていない場合は、BizTalk プロジェクトのオーケストレーション ビュー ウィンドウを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントし、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「 NotifyReceive
」と入力します。メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、[ SQLNotify.Notification] を選択します。 SQLNotify は BizTalk プロジェクトの名前です。 通知 は、 通知 操作に対して生成されるスキーマです。 手順 3 を繰り返して、2 つの新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。
識別子を設定 メッセージの種類を設定する 選択する SQLNotify.TableOperation_dbo_Employee.Select。 ここで、TableOperation_dbo_Employee は Select 操作用に生成されたスキーマです。 SelectResponse SQLNotify.TableOperation_dbo_Employee.SelectResponse
オーケストレーションの設定
BizTalk オーケストレーションを作成して、BIZTalk Server を使用して SQL Server データベースから通知メッセージを受信し、通知を受信した行を更新する必要があります。 このオーケストレーションでは、アダプターは NotificationStatement バインディング プロパティに指定された SELECT ステートメントに基づいて通知メッセージを受信します。 通知メッセージは FILE の場所で受信されます。 応答を受信すると、オーケストレーションは、通知を受信する行を更新するために使用されるメッセージを構築します。 このメッセージの応答は、同じ FILE の場所でも受信されます。
そのため、オーケストレーションには次のものが含まれている必要があります。
通知メッセージを受信する一方向の受信ポート。
行を更新し、同じ応答を受信するメッセージを送信する双方向送信ポート。
オーケストレーション内でメッセージを構築し、更新操作を実行するメッセージの 構築 図形。
更新操作の応答を保存する FILE 送信ポート。
図形を受信および送信します。
サンプル オーケストレーションは次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。
形 | 図形の種類 | 特性 |
---|---|---|
通知を受け取る | 受け取る | - 名前を ReceiveNotification に設定する - アクティブ化を True に設定する |
保存通知 | 送信 | - 名前を SaveNotification に設定する |
選択メッセージを送信 | 送信 | - 名前を SendSelectMessage に設定する |
レシーブセレクトレスポンス | 受け取る | - 名前を ReceiveSelectResponse に設定する |
選択応答を保存 | 送信 | - 名前を SaveSelectResponse に設定する |
メッセージ構築シェイプの追加
[ メッセージの構築] 図形を使用すると、操作内で要求メッセージを生成して Select 操作を実行できます。 そのためには、 メッセージの構築 図形を追加し、その中に メッセージの割り当て 図形をオーケストレーションに追加する必要があります。 この例では、 メッセージ割り当て 図形は、選択操作を実行するために SQL Server に送信されるメッセージを生成するコードを呼び出します。 [メッセージの割り当て] 図形では、SQL Server に送信するメッセージのアクションも設定します。
メッセージ構築図形の場合は、 Message Constructed プロパティを Select に設定します。
応答を生成するコードは、BizTalk プロジェクトと同じ Visual Studio ソリューションの一部である可能性があります。 応答メッセージを生成するためのサンプル コードは次のようになります。
namespace SampleMessageCreator
{
public class SampleMessageCreator
{
private static XmlDocument Message;
private static string XmlFileLocation;
private static string ResponseDoc;
public static XmlDocument XMLMessageCreator()
{
XmlFileLocation = "C:\\TestLocation\\CreateMessage";
try
{
ResponseDoc = (Directory.GetFiles(XmlFileLocation, "*.xml", SearchOption.TopDirectoryOnly))[0];
}
catch (Exception ex)
{
Console.WriteLine("Trying to get XML from: " + XmlFileLocation);
Console.WriteLine("EXCEPTION: " + ex.ToString());
throw ex;
}
//Create Message From XML
Message = new XmlDocument();
Message.PreserveWhitespace = true;
Message.Load(ResponseDoc);
return Message;
}
}
}
上記のコードの抜粋で要求メッセージを生成できるようにするには、 XmlFileLocation
変数に指定された場所に XML 要求メッセージ (Employee テーブルの Select 操作用) が必要です。
注
プロジェクトをビルドすると、プロジェクト ディレクトリに SampleMessageCreator.dll が作成されます。 この DLL をグローバル アセンブリ キャッシュ (GAC) に追加する必要があります。 また、SampleMessageCreator.dll を参照として BizTalk プロジェクトに追加する必要があります。
次の式を追加して、 メッセージ割り当て 図形からこのコードを呼び出し、メッセージのアクションを設定します。 式を追加するには、[ メッセージの割り当て] 図形をダブルクリックして式エディターを開きます。
Select = SampleMessageCreator.SampleMessageCreator.XMLMessageCreator();
Select(WCF.Action) = "TableOp/Select/dbo/Employee";
ポートの追加
論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
港 / ポート | 特性 |
---|---|
SQLNotifyPort | - 識別子を SQLNotifyPort に設定する - 型を SQLNotifyPortType に設定する - 通信パターンを一方向に設定する - 通信方向を受信に設定する |
SaveMessagePort | - 識別子を SaveMessagePort に設定する - 型を SaveMessagePortType に設定する - 通信パターンを一方向に設定する - 通信方向を送信に設定する - 通知操作を作成します。 この操作は、通知メッセージに使用されます。 - 操作 Select を作成します。 この操作は、選択応答メッセージに使用されます。 |
SQLアウトバウンドポート | - 識別子を SQLOutboundPort に設定する - 型を SQLOutboundPortType に設定する - 通信パターンを Request-Response に設定する - 通信方向を送受信に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。
形 | 特性 |
---|---|
通知を受け取る | - メッセージを NotifyReceive に設定する - 操作を SQLNotifyPort.Notify.Request に設定する |
保存通知 | - メッセージを NotifyReceive に設定する - SaveMessagePort.Notify.Request に操作を設定する |
SendSelectMessage | - メッセージを選択するように設定する - 操作を SQLOutboundPort.Select.Request に設定する |
選択応答を受信 | - メッセージを SelectResponse に設定する - 操作を SQLOutboundPort.Select.Response に設定する |
保存選択応答 | - メッセージを SelectResponse に設定する - SaveMessagePort.Select.Request に操作を設定する |
これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。
BizTalk ソリューションをビルドし、BizTalk Server に展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。
BizTalk アプリケーションの構成
BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが BizTalk Server 管理コンソールの [ オーケストレーション ] ウィンドウの下に一覧表示されます。 BizTalk Server 管理コンソールを使用してアプリケーションを構成する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。
アプリケーションの構成には、次の作業が含まれます。
アプリケーションのホストの選択。
オーケストレーションで作成したポートを BizTalk Server 管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。
物理 WCF-Custom または一方向の受信ポート WCF-SQL 定義します。 このポートは、SQL Server データベースからの通知をリッスンします。 ポートを作成する方法については、「 SQL アダプターへの物理ポート バインドを手動で構成する」を参照してください。 受信ポートには、次のバインド プロパティを指定してください。
Von Bedeutung
デザイン時にバインド プロパティを指定した場合は、この手順を実行する必要はありません。 このような場合は、アダプターの使用サービス アドインによって作成されたバインド ファイルをインポートすることで、必要なバインド プロパティを設定して、WCF カスタムまたは WCF-SQL 受信ポートを作成できます。 詳細については、 SQL アダプターを使用するようにポート バインド ファイルを使用して物理ポート バインドを構成するを参照してください。
バインディングプロパティ 価値 InboundOperationType これを [通知] に設定します。 NotificationStatement 次の設定を行います。
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
手記: この SELECT ステートメントに示すように、ステートメントで列名を具体的に指定する必要があります。 また、テーブル名とスキーマ名を常に指定する必要があります。 たとえば、dbo.Employee
のようにします。NotifyOnListenerStart これを True に設定 します。 さまざまなバインド プロパティの詳細については、「 BizTalk Adapter for SQL Server アダプターのバインド プロパティの読み取り」を参照してください。
注
SQL アダプターを使用して受信操作を実行するときに、トランザクション分離レベルとトランザクション タイムアウトを構成することをお勧めします。 サービス動作を WCF-Custom または WCF-SQL 受信ポートの構成時に追加します。 サービスの動作を追加する方法については、「SQL を使用して トランザクション分離レベルとトランザクション タイムアウトを構成する」を参照してください。
SQL Server データベースにメッセージを送信する物理 WCF-Custom または送信ポート WCF-SQL 定義します。 また、送信ポートでアクションを指定する必要があります。
ハード ディスク上の場所と、BizTalk オーケストレーションが SQL Server データベースからメッセージを削除する対応するファイル ポートを定義します。 これらは、SQL Server から受信した通知メッセージと、WCF-Custom または WCF-SQL 送信ポートを介して実行する Select and Update 操作のメッセージです。
アプリケーションの起動
SQL Server データベースから通知メッセージを受信し、以降の選択操作と更新操作を実行するために、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。
この段階で、次のことを確認します。
WCF-Custom または WCF-SQL の一方向受信ポートは、SQL Server データベースから通知メッセージを受信して実行しています。
Employee テーブルに対して Select 操作と Update 操作を実行する WCF-Custom または WCF-SQL 送信ポートが実行されています。
SQL Server からメッセージを受信する FILE 送信ポートが実行されています。
操作の BizTalk オーケストレーションが実行されています。
操作の実行
この操作を実行するには、Employee テーブルにレコードを挿入する必要があります。 次の詳細を含むレコードを挿入するとします。
Name = John Smith
Designation = Manager
Salary = 100000
また、選択操作と更新操作を実行する XML メッセージが C:\TestLocation\MessageIn で使用できることを確認します。 XML ファイルは次のようになります。
<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Columns>Employee_ID,Name,Status</Columns>
<Query>where Status=0;UPDATE Employee SET Status=1 WHERE Status=0</Query>
</Select>
レコードが挿入されると、同じ順序で次の一連のアクションが実行されます。
アダプターは、次のような通知メッセージを受信します。
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Insert</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
このメッセージは、レコードが Employee テーブルに挿入されたことを通知します。
<Info>
要素の値は "Insert" であることに注意してください。アダプターは、選択操作を実行します。 Select 操作 XML にも Update ステートメントが含まれているため、Update ステートメントも実行されます。 SQL Server からの次の応答は、Select ステートメントに対する応答です。
<?xml version="1.0" encoding="utf-8" ?> <SelectResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <SelectResult> <Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo"> <Employee_ID>10006</Employee_ID> <Name>John</Name> <Status>0</Status> </Employee> </SelectResult> </SelectResponse>
この応答は、レコードが Employee テーブルに挿入され、そのレコードの Status が 0 であることを示しています。
Select ステートメントの一部として、Update ステートメントも実行され、新しいレコードの Status 列が 1 に変更されます。 これにより、再び SQL Server から別の通知がトリガーされ、アダプターは、次のような対応する通知メッセージを受信します。
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Update</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
このメッセージは、Employee テーブルのレコードが更新されたことを通知します。
<Info>
要素の値は "Update" であることに注意してください。2 番目の通知の後、アダプターは Select ステートメントを実行します。 ただし、状態が 0 のレコードが存在しないため、アダプターは次のような空の応答を取得します。
<?xml version="1.0" encoding="utf-8" ?> <SelectResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <SelectResult /> </SelectResponse>
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、構成設定をバインド ファイルと呼ばれる XML ファイルにエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートと受信ポートを作成する必要がないように、ファイルから構成設定をインポートできます。 バインディング・ファイルの詳細については、 SQL アダプター・バインディングの再利用を参照してください。