Delen via


Querymeldingen inschakelen

Toepassingen die querymeldingen gebruiken, hebben een gemeenschappelijke set vereisten. Uw gegevensbron moet correct zijn geconfigureerd ter ondersteuning van SQL-querymeldingen en de gebruiker moet over de juiste machtigingen aan de client- en serverzijde beschikken.

Als u querymeldingen wilt gebruiken, moet u het volgende doen:

  • Schakel querymeldingen in voor uw database.

  • Zorg ervoor dat de gebruikers-id die wordt gebruikt om verbinding te maken met de database over de benodigde machtigingen beschikt.

  • Gebruik een SqlCommand object om een geldige SELECT-instructie uit te voeren met een gekoppeld meldingsobject, of SqlDependency SqlNotificationRequest.

  • Geef code op om de melding te verwerken als de gegevens die worden bewaakt, worden gewijzigd.

Vereisten voor querymeldingen

Querymeldingen worden alleen ondersteund voor SELECT-instructies die voldoen aan een lijst met specifieke vereisten. De volgende tabel bevat koppelingen naar de documentatie over Service Broker- en Querymeldingen in de SQL Server-documenten.

Documentatie over SQL Server

Querymeldingen inschakelen om voorbeeldcode uit te voeren

Als u Service Broker wilt inschakelen op de AdventureWorks-database met behulp van SQL Server Management Studio, voert u de volgende Transact-SQL-instructie uit:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

De volgende Transact-SQL-instructies moeten worden uitgevoerd op de databaseserver om de querymeldingsvoorbeelden correct uit te voeren.

CREATE QUEUE ContactChangeMessages;  
  
CREATE SERVICE ContactChangeNotifications  
  ON QUEUE ContactChangeMessages  
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);  

Machtigingen voor querymeldingen

Gebruikers die opdrachten uitvoeren die een melding aanvragen, moeten de databasemachtiging ABONNEREN QUERYMELDINGEN hebben op de server.

Code aan de clientzijde die wordt uitgevoerd in een gedeeltelijke vertrouwenssituatie vereist de SqlClientPermission.

Met de volgende code maakt u een SqlClientPermission object en stelt u het in PermissionState op Unrestricted. De Demand uitvoering wordt afgedwongen SecurityException als alle bellers hoger in de aanroepstack niet de machtiging hebben gekregen.

// 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

Een meldingsobject kiezen

De API voor querymeldingen biedt twee objecten voor het verwerken van meldingen: SqlDependency en SqlNotificationRequest. Over het algemeen moeten de meeste non-ASP.NET toepassingen het SqlDependency object gebruiken. ASP.NET toepassingen moeten gebruikmaken van het hogere niveau SqlCacheDependency, dat verpakt SqlDependency en een framework biedt voor het beheren van de meldings- en cacheobjecten.

SqlDependency gebruiken

Om te kunnen gebruiken SqlDependency, moet Service Broker zijn ingeschakeld voor de SQL Server-database die wordt gebruikt en moeten gebruikers machtigingen hebben om meldingen te ontvangen. Service Broker-objecten, zoals de meldingswachtrij, zijn vooraf gedefinieerd.

Daarnaast SqlDependency wordt automatisch een werkrolthread gestart om meldingen te verwerken wanneer deze in de wachtrij worden geplaatst. Het parseert ook het Service Broker-bericht, waarbij de informatie als gebeurtenisargumentgegevens wordt weergegeven. SqlDependency moet worden geïnitialiseerd door de Start methode aan te roepen om een afhankelijkheid voor de database tot stand te brengen. Dit is een statische methode die slechts eenmaal moet worden aangeroepen tijdens de initialisatie van de toepassing voor elke vereiste databaseverbinding. De Stop methode moet worden aangeroepen bij beëindiging van de toepassing voor elke afhankelijkheidsverbinding die is gemaakt.

SqlNotificationRequest gebruiken

U moet daarentegen SqlNotificationRequest zelf de volledige luisterinfrastructuur implementeren. Daarnaast moeten alle ondersteunende Service Broker-objecten, zoals de wachtrij, service en berichttypen die door de wachtrij worden ondersteund, worden gedefinieerd. Deze handmatige benadering is handig als uw toepassing speciale meldingsberichten of gedrag van meldingen vereist, of als uw toepassing deel uitmaakt van een grotere Service Broker-toepassing.

Zie ook