Condividi tramite


Lezione 1: Creazione degli oggetti di conversazione di base

In questa lezione verranno descritte le procedure per compilare tutti gli oggetti che consentono a un database di supportare una conversazione.

Procedure

Abilitazione di Service Broker e passaggio al database AdventureWorks2008R2

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per attivare Service Broker nel database AdventureWorks2008R2 e cambiare contesto passando al database.

    USE master;
    GO
    ALTER DATABASE AdventureWorks2008R2
          SET ENABLE_BROKER;
    GO
    USE AdventureWorks2008R2;
    GO
    

Creazione dei tipi di messaggio

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare i tipi di messaggio per la conversazione. Poiché in genere più istanze del Motore di database fanno riferimento agli oggetti Service Broker, i nomi assegnati alla maggior parte degli oggetti Service Broker sono in formato URI. In questo modo, è possibile garantire che i nomi siano univoci in più computer. Entrambi i tipi di messaggio specificano che Service Broker convaliderà i messaggi solo per verificare che siano documenti XML ben formati, ma non convaliderà il formato XML rispetto a uno schema specifico.

    CREATE MESSAGE TYPE
           [//AWDB/InternalAct/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE
           [//AWDB/InternalAct/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

Creazione del contratto

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare il contratto per la conversazione. Il contratto specifica che le conversazioni che lo utilizzano devono inviare messaggi del tipo //AWDB/InternalAct/RequestMessage dall'initiator alla destinazione e messaggi del tipo //AWDB/InternalAct/ReplyMessage dalla destinazione all'initiator.

    CREATE CONTRACT [//AWDB/InternalAct/SampleContract]
          ([//AWDB/InternalAct/RequestMessage]
           SENT BY INITIATOR,
           [//AWDB/InternalAct/ReplyMessage]
           SENT BY TARGET
          );
    GO
    

Creazione della coda e del servizio di destinazione

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare la coda e il servizio utilizzati per la destinazione. Poiché alle code viene fatto riferimento dallo stesso database in modo simile alle tabelle o alle viste, i nomi di coda hanno lo stesso formato dei nomi di tabella o di vista. L'istruzione CREATE SERVICE associa il servizio a TargetQueueIntAct. Tutti i messaggi inviati al servizio, pertanto, verranno ricevuti in TargetQueueIntAct. L'istruzione CREATE SERVICE specifica inoltre che solo le conversazioni che utilizzano il contratto //AWDB/InternalAct/SampleContract creato in precedenza possono utilizzare il servizio come servizio di destinazione.

    CREATE QUEUE TargetQueueIntAct;
    
    CREATE SERVICE
           [//AWDB/InternalAct/TargetService]
           ON QUEUE TargetQueueIntAct
              ([//AWDB/InternalAct/SampleContract]);
    GO
    

Creazione della coda e del servizio per l'initiator

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare la coda e il servizio utilizzati per l'initiator. Poiché non è stato specificato alcun nome di contratto, nessun altro servizio potrà utilizzare tale servizio come servizio di destinazione.

    CREATE QUEUE InitiatorQueueIntAct;
    
    CREATE SERVICE
           [//AWDB/InternalAct/InitiatorService]
           ON QUEUE InitiatorQueueIntAct;
    GO
    

Passaggi successivi

È stato configurato correttamente AdventureWorks2008R2 per supportare una conversazione tra //AWDB/InternalAct/InitiatorService e //AWDB/InternalAct/TargetService. In seguito si creerà una stored procedure per supportare l'attivazione interna nella coda di destinazione. Vedere Lezione 2: Creazione di una procedura ad attivazione interna.