クエリ通知の有効化
クエリ通知を使用するアプリケーションには、いくつか共通する要件があります。 SQL クエリ通知をサポートするには、データ ソースが正しく設定され、ユーザーがクライアント側およびサーバー側の正しい権限を所有している必要があります。
クエリ通知を使用するには、次の操作が必要です。
- データベースのクエリ通知を有効にします。
- データベースへの接続に使用するユーザー ID に必要なアクセス許可があることを確認します。
- SqlCommand オブジェクトを使用して、通知オブジェクト (SqlDependency または SqlNotificationRequest のいずれか) が関連付けられている有効な SELECT ステートメントを実行します。
- 監視対象のデータが変更された場合に通知を処理するコードを設定する
クエリ通知の要件
クエリ通知は、特定の要件を満たす SELECT ステートメントでのみサポートされます。 次の表に、SQL Server オンライン ブックの Service Broker とクエリ通知のドキュメントへのリンクを示します。
SQL Server ドキュメント
- 通知のためのクエリの作成
- Service Broker のセキュリティに関する注意点
- セキュリティと保護 (Service Broker)
- Notification Services のセキュリティに関する注意点
- クエリ通知の権限
- Service Broker の国際化に関する注意点
- ソリューション設計に関する考慮事項 (Service Broker)
- Service Broker 開発者向けの情報
- 開発者ガイド (Service Broker)
サンプル コードを実行するためのクエリ通知の有効化
AdventureWorks データベースで Service Broker を有効にするには、SQL Server Management Studio を通じて、次の Transact-SQL ステートメントを実行します。
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
クエリ通知のサンプルを正しく実行するには、次の Transact-SQL ステートメントをデータベース サーバー上で実行する必要があります。
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
クエリ通知のアクセス許可
通知を要求するコマンドを実行するユーザーは、特定のサーバーに対する SUBSCRIBE QUERY NOTIFICATIONS データベース アクセス許可を必要とします。
部分的に信頼される状況で実行されるクライアント側のコードには SqlClientPermission が必要です。
次のコードは SqlClientPermission オブジェクトを作成し、PermissionState を Unrestricted に設定します。 Demand を使用すると、呼び出し履歴の上位にある呼び出し元にアクセス許可が付与されていないものがある場合、実行時に SecurityException が強制されます。
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
通知オブジェクトの選択
クエリ通知 API は、通知を処理するために SqlDependency と SqlNotificationRequest という 2 つのオブジェクトを提供します。
SqlDependency の使用
SqlDependency を使用するには、使用する SQL Server データベースに対して Service Broker を有効にし、通知を受け取るためのアクセス許可をユーザーに与える必要があります。 通知キューなどの Service Broker オブジェクトは事前に定義されています。
また、SqlDependency によって自動的にワーカー スレッドが起動し、キューに投稿された通知が処理されます。 また、Service Broker メッセージが解析され、イベント引数データとして情報が公開されます。 SqlDependency は、Start
メソッドを呼び出し、データベースに対する依存関係を確立して初期化する必要があります。 Start
は、必要な各データベース接続に対するアプリケーションの初期化中に 1 回だけ呼び出す必要のある静的メソッドです。 Stop
メソッドは、作成された依存関係の接続ごとにアプリケーションの終了時に呼び出す必要があります。
SqlNotificationRequest の使用
これに対して、SqlNotificationRequest では、リッスンしているインフラストラクチャ全体を自分で実装する必要があります。 また、キュー、サービス、およびキューでサポートされているメッセージの種類など、サポート対象となるすべての Service Broker オブジェクトを定義する必要があります。 手動によるこの方法は、使用しているアプリケーションで特殊な通知メッセージや通知動作が必要な場合、またはそのアプリケーションが Service Broker アプリケーションの一部である場合に使用すると便利です。
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示