BEGIN CONVERSATION TIMER (Transact-SQL)

Avvia un timer. Alla scadenza del timeout, Service Broker inserisce un messaggio di tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer nella coda locale per la conversazione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • BEGIN CONVERSATION TIMER (conversation_handle)
    Specifica la conversazione per cui avviare il timer. conversation_handle deve essere di tipo uniqueidentifier.

  • TIMEOUT
    Specifica, in secondi, quanto tempo deve trascorrere prima che il messaggio venga inserito nella coda.

Osservazioni

Il timer di conversazione consente a un'applicazione di ricevere un messaggio per una conversazione dopo un periodo di tempo specifico. Se si chiama BEGIN CONVERSATION TIMER per una conversazione prima della scadenza del timer, per il timeout verrà impostato il nuovo valore. A differenza di quanto avviene per la durata della conversazione, ogni lato della conversazione ha un timer indipendente. Il messaggio DialogTimer arriva nella coda locale senza che venga interessato il lato remoto della conversazione. Un'applicazione può, quindi, utilizzare un messaggio timer per qualsiasi motivo.

È possibile, ad esempio, utilizzare il timer di conversazione per evitare che un'applicazione attenda troppo a lungo una risposta scaduta. Se si prevede che un'applicazione completi un dialogo in 30 secondi, è possibile impostare il timer di conversazione per tale dialogo su 60 secondi (30 secondi più altri 30 secondi di tolleranza). Se il dialogo è ancora aperto dopo 60 secondi, l'applicazione riceve un messaggio di timeout nella coda.

In alternativa un'applicazione può utilizzare un timer di conversazione per richiedere l'attivazione in un determinato momento. Si potrebbe, ad esempio, creare un servizio che segnali il numero di connessioni attive a intervalli di pochi minuti oppure un servizio che segnali il numero di ordini di acquisto aperti ogni sera. Il servizio imposta la scadenza desiderata per un timer di conversazione. Alla scadenza, Service Broker invia un messaggio DialogTimer, che determina l'avvio della stored procedure di attivazione per la coda da parte di Service Broker. La stored procedure invia un messaggio al servizio remoto e riavvia il timer di conversazione.

BEGIN CONVERSATION TIMER non è valida in una funzione definita dall'utente.

Autorizzazioni

L'autorizzazione per l'impostazione di un timer di conversazione viene assegnata per impostazione predefinita agli utenti che dispongono delle autorizzazioni SEND per il servizio della conversazione, ai membri del ruolo predefinito del server sysadmin e ai membri del ruolo predefinito del database db_owner.

Esempi

Nell'esempio seguente viene impostato un timeout di due minuti per il dialogo identificato da @dialog\_handle.

-- @dialog_handle is of type uniqueidentifier and
-- contains a valid conversation handle.

BEGIN CONVERSATION TIMER (@dialog_handle)
TIMEOUT = 120 ;