Dela via


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.

Se även