Freigeben über


BEGIN CONVERSATION TIMER (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Startet einen Zeitgeber. Wenn das Timeout abläuft, stellt Service Broker eine Nachricht des Typs https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer in die lokale Warteschlange für die Konversation.

Transact-SQL-Syntaxkonventionen

Syntax

BEGIN CONVERSATION TIMER ( conversation_handle )  
   TIMEOUT = timeout   
[ ; ]  

Argumente

BEGIN CONVERSATION TIMER (conversation_handle)
Gibt die Konversation an, für die ein Zeitgeber festgelegt werden soll. conversation_handle muss dem Typ uniqueidentifier entsprechen.

TIMEOUT
Gibt die Zeitdauer in Sekunden an, die gewartet wird, bevor die Nachricht in der Warteschlange platziert wird.

Bemerkungen

Mithilfe eines Konversationszeitgebers kann eine Anwendung nach einem bestimmten Zeitraum eine Nachricht zu einer Konversation empfangen. Wird BEGIN CONVERSATION TIMER für eine Konversation vor Ablauf des Zeitgebers aufgerufen, wird das Timeout auf den neuen Wert festgelegt. Anders als bei der Lebensdauer der Konversation verfügt jede Seite der Konversation über einen unabhängigen Konversationszeitgeber. Die DialogTimer-Nachricht kommt in der lokalen Warteschlange an, ohne dass dies Auswirkungen auf die Remoteseite der Konversation hat. Daher kann eine Zeitgebernachricht zu jedem beliebigen Zweck von einer Anwendung verwendet werden.

Sie können z. B. mithilfe des Konversationszeitgebers verhindern, dass eine Anwendung zu lang auf eine überfällige Antwort wartet. Wenn die Anwendung einen Dialog innerhalb von 30 Sekunden beenden soll, können Sie den Konversationszeitgeber für diesen Dialog auf 60 Sekunden festlegen (30 Sekunden plus einem Zeitraum von 30 Sekunden als Puffer). Falls der Dialog nach 60 Sekunden immer noch geöffnet ist, empfängt die Anwendung eine Timeoutnachricht in der Warteschlange für diesen Dialog.

Alternativ hierzu kann eine Anwendung auch mithilfe eines Konversationszeitgebers die Aktivierung zu einer bestimmten Zeit anfordern. Sie können z. B. einen Dienst erstellen, der alle fünf Minuten die Anzahl der aktiven Verbindungen angibt, oder einen Dienst, der jeden Abend die Anzahl der offenen Bestellungen angibt. Der Dienst legt einen Konversationstimer fest, der zu der gewünschten Zeit abläuft. Bei Ablauf des Zeitgebers sendet Service Broker eine DialogTimer-Nachricht. Mit der DialogTimer-Nachricht startet Service Broker die gespeicherte Aktivierungsprozedur für die Warteschlange. Von der gespeicherten Prozedur wird eine Nachricht an den Remotedienst gesendet und ein Neustart des Konversationszeitgebers ausgeführt.

BEGIN CONVERSATION TIMER ist in einer benutzerdefinierten Funktion nicht gültig.

Berechtigungen

Die Berechtigung zum Festlegen eines Konversationstimers erhalten standardmäßig die Benutzer, die über SEND-Berechtigungen für den Dienst der Konversation verfügen, die Mitglieder der festen Serverrolle sysadmin und die Mitglieder der festen Datenbankrolle db_owner.

Beispiele

Im folgenden Beispiel wird ein Timeout von zwei Minuten für den durch @dialog_handle identifizierten Dialog festgelegt.

-- @dialog_handle is of type uniqueidentifier and  
-- contains a valid conversation handle.  
  
BEGIN CONVERSATION TIMER (@dialog_handle)  
TIMEOUT = 120 ;  

Weitere Informationen

BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)