Aktivera frågemeddelanden
Program som använder frågemeddelanden har en gemensam uppsättning krav. Datakällan måste vara korrekt konfigurerad för att stödja SQL-frågemeddelanden och användaren måste ha rätt behörighet på klientsidan och på serversidan.
Om du vill använda frågemeddelanden måste du:
Aktivera frågemeddelanden för databasen.
Kontrollera att användar-ID:t som används för att ansluta till databasen har nödvändiga behörigheter.
Använd ett SqlCommand objekt för att köra en giltig SELECT-instruktion med ett associerat meddelandeobjekt – antingen SqlDependency eller SqlNotificationRequest.
Ange kod för att bearbeta meddelandet om de data som övervakas ändras.
Krav för frågemeddelanden
Frågemeddelanden stöds endast för SELECT-instruktioner som uppfyller en lista med specifika krav. Följande tabell innehåller länkar till dokumentationen för Service Broker och Query Notifications i SQL Server-dokumenten.
Dokumentation om SQL Server
Aktivera frågemeddelanden för att köra exempelkod
Om du vill aktivera Service Broker i AdventureWorks-databasen med hjälp av SQL Server Management Studio kör du följande Transact-SQL-instruktion:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
För att frågemeddelandeexemplen ska köras korrekt måste följande Transact-SQL-instruktioner köras på databasservern.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Behörigheter för frågemeddelanden
Användare som kör kommandon som begär avisering måste ha databasbehörigheten SUBSCRIBE QUERY NOTIFICATIONS på servern.
Kod på klientsidan som körs i en partiell förtroendesituation kräver SqlClientPermission.
Följande kod skapar ett SqlClientPermission objekt och anger PermissionState till Unrestricted. Demand Framtvingar en SecurityException vid körning om alla anropare högre i anropsstacken inte har beviljats behörigheten.
// 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
Välja ett meddelandeobjekt
API:et för frågemeddelanden innehåller två objekt för att bearbeta meddelanden: SqlDependency och SqlNotificationRequest. I allmänhet bör de flesta non-ASP.NET program använda objektet SqlDependency . ASP.NET program bör använda den högre nivån SqlCacheDependency, som omsluter och tillhandahåller ett ramverk för att administrera aviserings SqlDependency - och cacheobjekten.
Använda SqlDependency
Om du vill använda SqlDependencymåste Service Broker vara aktiverat för SQL Server-databasen som används och användarna måste ha behörighet att ta emot meddelanden. Service Broker-objekt, till exempel meddelandekön, är fördefinierade.
Dessutom SqlDependency startar automatiskt en arbetstråd för att bearbeta meddelanden när de publiceras i kön. Det parsar även Service Broker-meddelandet och exponerar informationen som händelseargumentdata. SqlDependency måste initieras genom att anropa Start
metoden för att upprätta ett beroende till databasen. Det här är en statisk metod som bara behöver anropas en gång under programinitieringen för varje databasanslutning som krävs. Metoden Stop
ska anropas vid programavslut för varje beroendeanslutning som har upprättats.
Använda SqlNotificationRequest
Däremot SqlNotificationRequest måste du implementera hela lyssnarinfrastrukturen själv. Dessutom måste alla stödda Service Broker-objekt, till exempel kö-, tjänst- och meddelandetyper som stöds av kön, definieras. Den här manuella metoden är användbar om ditt program kräver särskilda meddelanden eller meddelandebeteenden, eller om ditt program ingår i ett större Service Broker-program.