Aracılığıyla paylaş


Ders 3: Görüşme başlangıç ve iletileri gönderme

Bu derste, bir iç etkinleştirme ile yapılandırılmış bir sistemde basit istek-yanıt ileti döngüsünü tamamlamak öğreneceksiniz saklı yordam.

Yordamlar

AdventureWorks2008R2 veritabanına geçiş yapmak

  • Kopyalama ve aşağıdaki kodu bir Query Editor penceresine yapıştırın.Daha sonra çalıştırmak için içeriğinde geçiş yapma AdventureWorks2008R2 veritabanı.

    USE AdventureWorks2008R2;
    GO
    

Bir konuşma başlatmak ve bir istek iletisi gönderme

  • Kopyalama ve aşağıdaki kodu bir Query Editor penceresine yapıştırın.Daha sonra çalıştırmak bir konuşma başlatmak ve bir istek iletisi göndermek için //AWDB/InternalAct/TargetService.send deyim başlamak iletişim kutusundan bir iletişim tanıtıcı geçirmek için bir değişken kullanıldığı için kod tek bir blok olarak çalıştırmanız gerekir.toplu iş iş iş başlamak iletişim çalışır deyim görüşme başlatmak için.Bir istek iletisi oluşturur ve sonra bu konuşma, istek iletisi göndermek için send deyim içinde iletişim işleci kullanır.Gönderilen ileti metninin son deyim görüntüler.

    DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RequestMsg NVARCHAR(100);
    
    BEGIN TRANSACTION;
    
    BEGIN DIALOG @InitDlgHandle
         FROM SERVICE
          [//AWDB/InternalAct/InitiatorService]
         TO SERVICE
          N'//AWDB/InternalAct/TargetService'
         ON CONTRACT
          [//AWDB/InternalAct/SampleContract]
         WITH
             ENCRYPTION = OFF;
    
    -- Send a message on the conversation
    SELECT @RequestMsg =
           N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE 
         [//AWDB/InternalAct/RequestMessage]
         (@RequestMsg);
    
    -- Diplay sent request.
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

İstek gönderip yanıt

  • İstek iletisi gönderdiğinizde, Service Broker otomatik olarak, bir kopyasını etkinleştirir TargetActiveProc.Saklı yordam yanıtı iletisinden alır TargetQueueIntAct ve geri başlatıcı için bir yanıt iletisi gönderir.

Konuşmayı sona erdirmek ve yanıt alma

  • Kopyalama ve aşağıdaki kodu bir Query Editor penceresine yapıştırın.Daha sonra yanıt iletisi ve son konuşma almasına izin çalıştırın.Gelen yanıt iletisi alma deyim alır InitiatorQueueIntAct.end konuşma deyim konuşma Başlatıcı yan sonlandırır ve gönderen bir EndDialog için ileti hedef service.Bunu önceki adımda ne gönderildiği aynıdır onaylamak için son deyim yanıt iletisi metnini görüntüler.

    DECLARE @RecvReplyMsg NVARCHAR(100);
    DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER;
    
    BEGIN TRANSACTION;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReplyDlgHandle = conversation_handle,
        @RecvReplyMsg = message_body
        FROM InitiatorQueueIntAct
    ), TIMEOUT 5000;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    -- Display recieved request.
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Görüşmenin hedef kenarı bitirmek

  • Başlatıcı için end konuşma deyim çalıştırdığınızda, Service Broker gönderen bir EndDialog için ileti TargetQueueIntAct sıra.The TargetActiveProc procedure receives the EndDialog message and issues an END CONVERSATION that ends the target side of the conversation.

Sonraki Adımlar

Bir istek-yanıt ileti döngüsü arasında başarılı bir şekilde tamamladınız //AWDB/InternalAct/InitiatorService ve //AWDB/InternalAct/TargetService.Bu ders olarak istek-yanıt çifti iletileri iletmek istediğiniz kadar adımları yineleyebilirsiniz.GÖNDERME ve yanıtlama ifadeleri araştırma tamamladıktan sonra görüşmeye göre kullanılmış olan tüm nesneleri bırakabilir.Daha fazla bilgi için bkz: Ders 4: Görüşme nesneleri siliniyor.