Поделиться через


Контекст внутренней активации

В этом разделе описывается контекст выполнения для хранимой процедуры, которая запускается в результате внутренней активации.

Контекст безопасности

В очереди, настраиваемой для активации, также необходимо указать пользователя, от имени которого выполняется хранимая процедура активации. Перед запуском хранимой процедуры SQL Server выполняет олицетворение этого пользователя.

Если в хранимой процедуре также задано предложение EXECUTE AS, олицетворение применяется дважды. Сначала SQL Server выполняет олицетворение пользователя, указанного для очереди, и запускает хранимую процедуру. Хранимая процедура в процессе своей работы выполняет олицетворение пользователя, указанного в предложении EXECUTE AS.

Обратите внимание, что для привязки удаленной службы и для активации обычно указываются разные пользователи. Также различаются разрешения, необходимые каждому пользователю. Пользователю привязки удаленной службы не нужно разрешение на чтение из очереди или выполнение хранимых процедур в базе данных, а пользователю, указываемому для активации, не нужно разрешение на отправку сообщений службе. Дополнительные сведения о разрешениях для пользователей см. в разделах Управление доступом и удостоверениями (компонент Service Broker) и Обеспечение безопасности диалогов компонента Service Broker.

Параметры сеанса

Компонент Service Broker выполняет служебные программы с внутренней активацией в фоновом сеансе, отдельно от соединения, создавшего сообщение. Для этого сеанса задаются параметры, используемые по умолчанию в базе данных.

В сеансе, запущенном компонентом Service Broker, SQL Server записывает выходные данные инструкций PRINT и RAISERROR в журнал ошибок SQL Server. Компонент Service Broker не передает параметры в хранимую процедуру активации. Компонент Service Broker не учитывает значения, возвращаемые хранимой процедурой активации и не обрабатывает ее результирующие наборы.

Контекст транзакции

Хранимая процедура активации выполняет управление транзакциями. SQL Server не начинает транзакцию до того, как активируется хранимая процедура, а хранимая процедура работает в контексте транзакций, отличном от контекста внутренней операции, которая выполняет активацию процедуры. Описание управления транзакциями в хранимых процедурах активации см. в разделе Обмен сообщениями на основе транзакций.

Обнаружение ошибок

Хранимая процедура активации должна получать сообщения из очереди, которая активировала эту процедуру. Если хранимая процедура завершает работу, не получив сообщений, или монитор очереди обнаруживает, что хранимая процедура не получает сообщения по истечении краткого времени ожидания, то монитор очереди считает, что в хранимой процедуре произошла ошибка. В этом случае монитор очереди прекращает активацию хранимой процедуры.

См. также

Справочник

Основные понятия