BEGIN CONVERSATION TIMER (Transact-SQL)
Запускает таймер. По истечении времени ожидания компонент Service Broker добавляет сообщение типа https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer в локальную очередь диалога.
Синтаксис
BEGIN CONVERSATION TIMER ( conversation_handle )
TIMEOUT = timeout
[ ; ]
Аргументы
BEGIN CONVERSATION TIMER (conversation_handle)
Указывает диалог, длительность которого нужно проконтролировать. Аргумент conversation_handle должен иметь тип uniqueidentifier.TIMEOUT
Указывает время ожидания (в секундах) перед добавлением сообщения в очередь.
Замечания
Таймер диалога предоставляет приложению способ получения сообщения в диалоге по истечении заданного времени. Вызов BEGIN CONVERSATION TIMER в диалоге до истечения времени ожидания устанавливает новое значение времени ожидания. В отличие от времени жизни диалога у каждой стороны диалога имеется свой таймер диалога. Сообщение DialogTimer появляется в локальной очереди, не оказывая влияния на удаленную сторону диалога. Поэтому приложение может использовать сообщение таймера для любых нужд.
Например, можно использовать таймер диалога для предотвращения слишком долгого ожидания приложением запоздалого отклика. Если завершение диалога ожидается в течение 30 секунд, то можно установить таймер для этого диалога на 60 секунд (30 секунд плюс 30 секунд допустимой задержки). Если диалог все еще открыт по истечении 60 секунд, приложение получит в очереди этого диалога сообщение об истечении времени ожидания.
В качестве альтернативы приложение может использовать таймер диалога для запроса активации в определенный момент. Например, можно создать службу, которая каждые пять минут сообщает число активных подключений. или службу, которая каждый вечер сообщает число открытых заказов на покупку. Служба устанавливает таймер диалога так, чтобы его время ожидания истекло в нужный момент; когда время ожидания истечет; компонент Service Broker отправляет сообщение DialogTimer. Сообщение DialogTimer приводит к тому, что компонент Service Broker запускает хранимую процедуру активации для очереди. Хранимая процедура отправляет сообщение удаленной службе и перезапускает таймер диалога.
Инструкция BEGIN CONVERSATION TIMER не может использоваться в пользовательских функциях.
Разрешения
По умолчанию разрешением на установку таймера диалога обладают пользователи, у которых есть разрешение SEND для службы в диалоге, члены предопределенной роли сервера sysadmin и члены предопределенной роли базы данных db_owner.
Примеры
Этот пример устанавливает двухминутное время ожидания для диалога с дескриптором @dialog\_handle.
-- @dialog_handle is of type uniqueidentifier and
-- contains a valid conversation handle.
BEGIN CONVERSATION TIMER (@dialog_handle)
TIMEOUT = 120 ;