Disinstallazione di applicazioni di Service Broker
È necessario disinstallare un'applicazione di Service Broker solo quando il database è sempre ospitato nella stessa istanza, ma non offre più il servizio implementato dall'applicazione. L'eliminazione di un database comporta l'eliminazione degli oggetti di Service Broker in esso contenuti. Lo spostamento di un database da un'istanza a un'altra comporta anche lo spostamento dei servizi ospitati nel database.
Disinstallazione di un servizio di origine
Per disinstallare un servizio di origine, interrompere innanzitutto la creazione di messaggi in uscita da parte dell'applicazione. Il modo più appropriato per impedire all'applicazione di inviare nuovi messaggi dipende dal tipo di applicazione. Per un'applicazione che inizia una conversazione mediante una stored procedure può essere necessario eliminare la stored procedure. Per un programma esterno può essere necessario rendere il programma non disponibile per gli utenti o disinstallarlo.
Dopo avere interrotto la creazione di nuovi messaggi da parte del servizio, verificare che quest'ultimo elabori tutti i messaggi rimasti nella coda. È possibile scrivere una semplice procedura per ricevere ogni messaggio nella coda, terminare la conversazione con un errore e rimuovere lo stato della conversazione. L'elaborazione di tutti i messaggi nella coda consente alle applicazioni di destinazione di terminare la conversazione normalmente, anziché attendere una risposta dal servizio in corso di arresto.
Infine, per garantire che Service Broker non accetti più messaggi per il servizio, eliminare la definizione di quest'ultimo. Eliminare tutte le route per il servizio. Eliminare i contratti, i tipi di messaggi e le code per il servizio, se tali oggetti non sono utilizzati da un altro servizio nell'istanza. Se necessario, eliminare la stored procedure di attivazione per il servizio.
Disinstallazione di un servizio di destinazione
Per disinstallare un servizio di destinazione, verificare innanzitutto che il servizio elabori ogni messaggio rimasto nella coda. È possibile consentire all'applicazione di elaborare i messaggi, scrivere una semplice procedura per terminare le conversazioni con un errore specifico dell'applicazione o semplicemente eliminare il servizio per terminare le conversazioni con un errore di Service Broker. Indipendentemente dall'opzione scelta, quando le conversazioni vengono terminate le applicazioni di origine vengono terminate normalmente e non devono attendere una risposta dal servizio in corso di arresto.
Nei database che ospitano servizi di origine eliminare ogni route contenente l'indirizzo di rete del servizio che si desidera disinstallare. Eliminare le route per questo servizio nel database msdb delle istanze che inoltrano i messaggi per il servizio. Se l'istanza che ospita il servizio contiene una route in msdb relativa al servizio in questione, eliminare la route.
Infine, per garantire che Service Broker non accetti più messaggi per il servizio, eliminare la definizione di quest'ultimo. Eliminare i contratti, i tipi di messaggi e le code per il servizio, se tali oggetti non sono utilizzati da un altro servizio nell'istanza. Se necessario, eliminare la stored procedure di attivazione per il servizio.