쿼리 알림 사용
쿼리 알림을 사용하는 애플리케이션에는 일반적인 요구 사항 집합이 있습니다. 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 개체를 만들고 PermissionState를 Unrestricted로 설정합니다. Demand는 호출 스택의 상위 호출자에게 권한이 없는 경우 런타임에 SecurityException을 발생시킵니다.
// 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에서는 알림을 처리하기 위한 두 개의 개체인 SqlDependency 및 SqlNotificationRequest입니다. 일반적으로 대부분의 비 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 애플리케이션에 속해 있는 경우에 유용합니다.