Contratti

Un contratto definisce i tipi di messaggi utilizzabili da un'applicazione per completare un'attività particolare. Un contratto è un accordo tra due servizi che definisce quali messaggi vengono inviati da ogni servizio per completare una determinata attività. Le definizioni dei contratti vengono mantenute nel database in cui è stato creato il tipo.

È necessario creare un contratto identico in ogni database che partecipa a una conversazione. Se, ad esempio, da un'applicazione di gestione delle risorse umane è necessario verificare l'ID di un dipendente, il servizio che richiede la verifica deve conoscere i tipi di messaggi previsti per l'altro servizio. Il servizio richiedente deve inoltre conoscere il tipo dei messaggi che riceverà, in modo da predisporne l'elaborazione.

Il contratto specifica i tipi di messaggi utilizzabili per completare l'attività desiderata e i tipi di messaggi utilizzabili da ogni partecipante alla conversazione. Alcuni tipi di messaggi possono essere inviati da entrambi i partecipanti mentre per altri tipi l'invio è limitato solo all'initiator o solo alla destinazione. Un contratto deve contenere un tipo di messaggio inviato dall'initiator o da uno dei due partecipanti. In caso contrario l'initiator non potrà iniziare una conversazione che utilizza il contratto.

Service Broker include inoltre il contratto predefinito DEFAULT, che contiene solo il tipo di messaggio SENT BY ANY. Se nell'istruzione BEGIN DIALOG non viene specificato un contratto, Service Broker utilizza il contratto DEFAULT.

Ad esempio, per un contratto è possibile specificare i tipi di messaggi SubmitRequest, ProcessRequest e RequestStatus. Solo l'endpoint di origine può utilizzare SubmitRequest e solo l'endpoint di destinazione può inviare ProcessRequest. Solo uno dei partecipanti alla conversazione può inviare il tipo di messaggio RequestStatus. Il tipo di messaggio RequestStatus consente al partecipante di visualizzare lo stato di elaborazione della destinazione o di verificare con l'initiator lo stato di qualsiasi operazione di elaborazione parallela relativa alla richiesta.