Share via


Contesto di attivazione interna

In questo argomento viene descritto il contesto di esecuzione per una stored procedure avviata dall'attivazione interna.

Contesto di protezione

In una coda configurata per l'attivazione è necessario specificare anche l'utente in base al quale la stored procedure di attivazione viene eseguita. In SQL Server tale utente viene rappresentato prima di avviare la stored procedure.

Quando la stored procedure specifica anche una clausola EXECUTE AS, vengono utilizzate due rappresentazioni. In SQL Server viene innanzitutto rappresentato l'utente specificato per la coda e viene eseguita la stored procedure. Successivamente, quando viene eseguita, la stored procedure rappresenta l'utente specificato nella clausola EXECUTE AS della procedura.

Si noti che l'utente specificato per un'associazione al servizio remoto è in genere diverso dall'utente specificato per l'attivazione e che anche le autorizzazioni necessarie per ogni utente sono diverse. Per l'utente relativo all'associazione al servizio remoto non è necessaria l'autorizzazione per leggere dalla coda o per eseguire le stored procedure nel database, mentre per l'utente specificato per l'attivazione non è necessaria l'autorizzazione per inviare i messaggi al servizio. Per ulteriori informazioni sulle autorizzazioni utente, vedere Controllo di identità e accesso (Service Broker) e Protezione del dialogo di Service Broker.

Impostazioni di sessione

Service Broker esegue programmi del servizio attivati internamente in una sessione in background distinta rispetto alla connessione che ha creato il messaggio. Le opzioni impostate per questa sessione sono quelle predefinite del database.

In una sessione avviata da Service Broker l'output delle istruzioni PRINT e RAISERROR viene scritto nel log degli errori di SQL Server. In Service Broker non sono disponibili parametri per una stored procedure attivata. In Service Broker non vengono inoltre restituiti valori né vengono elaborati set di risultati da una stored procedure attivata.

Contesto di transazione

Una stored procedure attivata è responsabile della gestione delle transazioni. In SQL Server una transazione non viene avviata prima dell'attivazione della stored procedure e la stored procedure viene eseguita in un contesto di transazione diverso rispetto a quello dell'operazione interna che attiva la procedura. Per ulteriori informazioni sulla gestione delle transazioni in stored procedure attivate, vedere Messaggistica transazionale.

Rilevamento degli errori

Una stored procedure attivata deve ricevere messaggi dalla coda che ha attivato la procedura stessa. Se si esce dalla stored procedure senza che sia stato ricevuto alcun messaggio o se il monitor di coda rileva che la stored procedure non ha ricevuto alcun messaggio dopo un timeout di breve durata, il monitor di coda considera che la stored procedure abbia avuto esito negativo e di conseguenza ne interrompe l'attivazione.