다음을 통해 공유


쿼리 알림 사용

ADO.NET 다운로드

쿼리 알림을 사용하는 애플리케이션에는 일반적인 요구 사항 집합이 있습니다. SQL 쿼리 알림을 지원하도록 데이터 소스를 올바르게 구성해야 하며, 사용자는 올바른 클라이언트측 및 서버측 권한을 가지고 있어야 합니다.

쿼리 알림을 사용하려면 다음을 수행해야 합니다.

  • 데이터베이스에 대해 쿼리 알림을 활성화합니다.
  • 데이터베이스 연결에 사용되는 사용자 ID에 필요한 권한이 있는지 확인합니다.
  • SqlCommand 개체를 사용하여 SqlDependency 또는 SqlNotificationRequest와 같은 관련된 알림 개체로 올바른 SELECT 문을 실행합니다.
  • 모니터링하는 데이터가 변경될 경우 알림을 처리하는 코드를 제공합니다.

쿼리 알림 요구 사항

쿼리 알림은 특정 요구 사항 목록을 충족하는 SELECT 문에 대해서만 지원됩니다. 다음 표에는 SQL Server 온라인 설명서의 Service Broker 및 쿼리 알림 문서에 대한 링크가 나와 있습니다.

SQL Server 설명서

쿼리 알림 활성화 샘플 코드

SQL Server Management Studio를 사용하여 AdventureWorks 데이터베이스에 대해 Service Broker를 활성화하려면 다음 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 개체를 만들고 PermissionStateUnrestricted로 설정합니다. 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에서는 알림을 처리하기 위한 두 개의 개체인 SqlDependencySqlNotificationRequest입니다.

SqlDependency 사용

SqlDependency를 사용하려면 사용 중인 SQL Server 데이터베이스에 대해 Service Broker를 활성화해야 하며 사용자는 알림을 수신할 수 있는 권한이 있어야 합니다. 알림 큐 같은 Service Broker 개체는 미리 정의되어 있습니다.

또한 SqlDependency에서는 큐에 게시될 때 자동으로 작업자 스레드를 시작하여 알림을 처리합니다. 또한 Service Broker 메시지를 구문 분석하여 정보를 이벤트 인수 데이터로 노출합니다. SqlDependencyStart 메서드를 호출하여 데이터베이스에 대해 종속성을 설정함으로써 초기화해야 합니다. Start은(는) 필요한 각 데이터베이스 연결에 대해 애플리케이션을 초기화할 때 한 번만 호출해야 하는 정적 메서드입니다. 만들어진 각 종속성 연결에 대해 애플리케이션이 종료될 때 Stop 메서드를 호출해야 합니다.

SqlNotificationRequest 사용

이와 반대로 SqlNotificationRequest를 사용하려면 전체 수신 인프라를 직접 구현해야 합니다. 또한 큐, 서비스, 큐에서 지원하는 메시지 유형과 같은 모든 지원 Service Broker 개체를 정의해야 합니다. 이 수동 접근 방식은 애플리케이션에 특별한 알림 메시지 또는 알림 동작이 필요하거나 애플리케이션이 보다 큰 Service Broker 애플리케이션에 속해 있는 경우에 유용합니다.

다음 단계