SEND (Transact-SQL)
Отправляет сообщение с помощью существующего диалога.
Синтаксис
SEND
ON CONVERSATION conversation_handle
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
[ ; ]
Аргументы
- ON CONVERSATION conversation_handle
Указывает диалог, к которому принадлежит сообщение. Аргумент conversation_handle должен содержать правильный идентификатор диалога.
- MESSAGE TYPEmessage_type_name
Указывает тип посылаемого сообщения. Этот тип сообщений должен входить в контракт службы, используемый этим диалогом. Контракт должен позволить отправить сообщение данного типа с этой стороны диалога. Например, целевая сторона диалога может посылать только сообщения, заданные в контракте как SENT BY TARGET или SENT BY ANY. Если это предложение пропущено, то сообщение принадлежит к типу сообщений DEFAULT.
- message_body_expression
Содержит выражение, представляющее тело сообщения. Аргумент message_body_expression является необязательным. Однако если аргумент message_body_expression указан, то выражение должно иметь тип, преобразуемый в тип varbinary(max). Выражение не может иметь значение NULL. Если это предложение не указано, то тело сообщения пустое.
Замечания
Важно! |
---|
Если инструкция SEND не первая в пакете или является хранимой процедурой, то предшествующая инструкция должна заканчиваться точкой с запятой (;), признаком конца инструкции языка Transact-SQL. |
Инструкция SEND блокирует группу сообщений, к которой принадлежит указанный дескриптор диалога.
Инструкция SEND недопустима в пользовательской функции.
Разрешения
Чтобы отправить сообщение, текущий пользователь должен иметь разрешение SEND на службу, которая начинает диалог. Если существует привязка удаленной службы для этой службы, то пользователь, указанный в удаленной службе, должен иметь разрешения RECEIVE на очередь для службы, которая начинает диалог.
Примеры
А. Отправка сообщения
В этом примере инициируется диалог и отправляется XML-сообщение. Чтобы отправить сообщение, в примере выполняется преобразование XML-объекта в тип varbinary(MAX).
DECLARE @dialog_handle UNIQUEIDENTIFIER,
@ExpenseReport XML ;
SET @ExpenseReport = < construct message as appropriate for the application > ;
BEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing] ;
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense]
(@ExpenseReport) ;
См. также
Справочник
BEGIN DIALOG CONVERSATION (Transact-SQL)
BEGIN CONVERSATION TIMER (Transact-SQL)
END CONVERSATION (Transact-SQL)
Другие ресурсы
Учебники по компоненту Service Broker