クエリ通知サブスクリプションの作成
通知のサブスクライブとは、コマンドを作成し、そのコマンドに通知要求をアタッチして、コマンドを実行する処理のことです。クエリ通知サブスクリプションは、データベース アクセス インターフェイスから作成する必要があります。Transact-SQL には、クエリ通知サブスクリプションを作成するためのメカニズムは用意されていません。
データベース エンジンは、Transact-SQL ステートメントの通知を直ちにコマンドに登録します。また、クエリ通知の要件を満たさないステートメントに対しても、直ちに通知を作成します。要件を満たすステートメントに対しては、サブスクリプションが作成されます。要件を満たすステートメントと要件を満たさないステートメントの両方を含むコマンドがサーバーに送信されないように注意する必要があります。
メモ : |
---|
Transact-SQL には、通知をサブスクライブする手段が用意されていません。SQL Server 内でホストされる CLR データ アクセス クラスでは、クエリ通知がサポートされません。 |
各クエリ通知サブスクリプションで 1 つの通知イベントが生成されます。通知の配信後、SQL Server により通知サブスクリプションが削除されます。そのため、再度、通知を受け取る必要があるアプリケーションでは、変更されたデータを取得するコマンドを使用して新しい通知を要求する必要があります。
クエリ通知の要求は、トランザクション処理ではありません。コマンドで通知を要求すると、そのコマンドを含むトランザクションがコミットされるかロールバックされるかに関係なく、データベース エンジンによって通知が登録されます。
クエリ通知のサブスクリプションは、クエリが実行されるデータベースに格納されます。動的管理ビュー sys.dm_qn_subscriptions には、現在アクティブなクエリ通知サブスクリプションに関する情報が表示されます。カタログ ビュー sys.internal_tables には、現在アクティブなクエリ通知サブスクリプションによって使用されている領域が表示されます。
SqlClient マネージ プロバイダを使用した通知サブスクリプション ストラテジの選択
通知サブスクリプションを要求する方法は 2 つあります。依存関係では、クエリ通知に対して上位インターフェイスが提供されます。アプリケーション側で必要な処理は、依存関係クラス (たとえば、ADO.NET の SqlDependency) のインスタンスを作成し、通知イベントを受信するハンドラを登録し、依存関係オブジェクトをクエリ コマンドに追加するだけです。通知が発生すると、依存関係オブジェクトによりハンドラが呼び出されます。
通知要求では、クエリ通知に対して柔軟性の高い下位インターフェイスが提供されます。依存関係と同様に、アプリケーションでは、通知要求 (たとえば、ADO.NET の SqlNotificationRequest のインスタンス) を作成し、その通知要求をクエリ コマンドに添付します。ただし、通知要求では、クエリの通知サブスクリプションが要求されるだけという点が依存関係と異なります。データベースから通知メッセージを取得し、メッセージを処理して、状況に応じた処理を行う作業はアプリケーション側で行う必要があります。通知要求を使用すると、アプリケーションを柔軟にデザインできるようになりますが、アプリケーション側で行う必要のある作業が増えます。通知要求は、通知を柔軟に処理する必要があるアプリケーションに適しています。たとえば、定期的に実行されるアプリケーションが存在すると依存関係オブジェクトは破棄されるので、このようなアプリケーションでは依存関係を使用できません。ただし、通知要求を使用すると、このようなアプリケーションでも起動時にキューを確認し、必要に応じてローカル データ キャッシュを更新できます。
通知サブスクリプションを登録するアプリケーションで通知の処理も行われる場合、アプリケーションが継続的に実行される場合、およびアプリケーションの実行中にデータベースに接続できる場合、アプリケーションでは依存関係が使用されます。このような要件を満たすアプリケーションでは、依存関係を使用することにより、クエリ通知を簡単に使用できるようになります。アプリケーションで依存関係を使用できないときは、通知要求が使用されます。この場合、アプリケーション開発者は、アプリケーションに合わせてメッセージを受信および処理するためのストラテジをデザインする必要があります。
通知に対する SOAP の使用
ネイティブの HTTP SOAP サポートには、クエリ通知のサポートが含まれています。<notificationRequest> ヘッダーを含む SOAP 要求では、クエリの通知サブスクリプションが作成されます。SqlNotificationRequest の場合と同様に、要求側でデータベースから通知メッセージを取得し、メッセージを処理して、状況に応じた処理を行う必要があります。Web サービス アプリケーションでは SQL Server に継続的に接続する必要はないので、この方法は Web サービス アプリケーションに適しています。
通知に対する SQL Server Native Client の使用
SQL Server Native Client OLE DB プロバイダまたは ODBC ドライバを使用するアプリケーションからも通知要求を送信できます。SQL Server Native Client アプリケーションによるクエリ通知の使用については、「クエリ通知の操作」を参照してください。
参照
概念
クエリ通知が行われる時点について
SqlDependency を使用したクエリ通知のサブスクライブ
SqlNotificationRequest の使用によるクエリ通知のサブスクライブ