다음을 통해 공유


쿼리 알림 활성화

쿼리 알림을 사용하는 애플리케이션에는 일반적인 요구 사항 집합이 있습니다. 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로 설정합니다. 호출 스택에서 더 높은 모든 호출자가 사용 권한을 부여받지 않은 경우, 런타임에 DemandSecurityException을 강제로 수행합니다.

// Code requires directives to
// System.Security.Permissions and
// System.Data.SqlClient

private bool CanRequestNotifications()
{
    SqlClientPermission permission =
        new SqlClientPermission(
        PermissionState.Unrestricted);
    try
    {
        permission.Demand();
        return true;
    }
    catch (System.Exception)
    {
        return false;
    }
}
' Code requires directives to
' System.Security.Permissions and
' System.Data.SqlClient

Private Function CanRequestNotifications() As Boolean

    Dim permission As New SqlClientPermission( _
      PermissionState.Unrestricted)

    Try
        permission.Demand()
        Return True
    Catch ex As Exception
        Return False
    End Try

End Function

알림 개체 선택

쿼리 알림 API는 알림을 처리하기 위해 두 개체인 SqlDependencySqlNotificationRequest를 제공합니다. 일반적으로 대부분의 non-ASP.NET 애플리케이션은 개체를 SqlDependency 사용해야 합니다. ASP.NET 애플리케이션은 SqlCacheDependency을 래핑하고 알림 및 캐시 개체를 관리하기 위해 프레임워크를 제공하는 상위 수준의 SqlDependency을 사용해야 합니다.

SqlDependency 사용

사용 SqlDependency하려면 사용 중인 SQL Server 데이터베이스에 대해 Service Broker를 사용하도록 설정해야 하며 사용자에게 알림을 받을 수 있는 권한이 있어야 합니다. 알림 큐와 같은 Service Broker 개체가 미리 정의됩니다.

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

SqlNotificationRequest 사용

반대로, SqlNotificationRequest 리스닝 인프라를 직접 구현해야 합니다. 또한 큐, 서비스 및 큐에서 지원하는 메시지 유형과 같은 모든 지원 Service Broker 개체를 정의해야 합니다. 이 수동 방법은 애플리케이션에 특별한 알림 메시지 또는 알림 동작이 필요하거나 애플리케이션이 더 큰 Service Broker 애플리케이션의 일부인 경우에 유용합니다.

참고하십시오