Dela via


Aktivera frågemeddelanden

Ladda ned ADO.NET

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 Books Online.

SQL Server-dokumentation

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 Tvingar fram en SecurityException vid körning om alla metodanropare högre i anropsstacken inte har beviljats behörigheten.

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;
        }
    }
}

Välja ett meddelandeobjekt

API:et för frågemeddelanden innehåller två objekt för att bearbeta meddelanden: SqlDependency och SqlNotificationRequest.

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.

Startar också automatiskt en arbetstråd för att bearbeta meddelanden när dessa har lagts till i kön. Det parsar också 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. Start är en statisk metod som bara behöver anropas en gång under programinitiering 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.

Nästa steg