Aracılığıyla paylaş


Ders 2: İç etkinleştirme yordamı oluşturma

Bu derste, oluşturmak öğreneceksiniz bir saklı yordam işlem iletileri için bir Service Broker sıra.Sıradaki iletileri vardır her saat yordamı etkinleştirilmesi belirleme konusunda da öğreneceksiniz.

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 iç etkinleştirme oluşturmasaklı yordam

  • Kopyalama ve aşağıdaki kodu bir Query Editor penceresine yapıştırın.Daha sonra çalıştırın oluşturmak amacıyla bir saklı yordam.Ne zaman çalıştırmak vardır sürece iletiler sıraya ileti alma saklı yordam tutar olduğunu.Bir ileti dönmeden alma zaman aşımına uğrarsa, saklı yordam sona erer.Alınan iletiyi bir istek iletisi ise, saklı yordam bir yanıt iletisi döndürür.Alınan ileti ise bir EndDialog ileti, saklı yordam hedef yan Görüşmenin sona erer.Alınan ileti ise ve hata ileti, onu geri alır hareket.

    CREATE PROCEDURE TargetActivProc
    AS
      DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
      DECLARE @RecvReqMsg NVARCHAR(100);
      DECLARE @RecvReqMsgName sysname;
    
      WHILE (1=1)
      BEGIN
    
        BEGIN TRANSACTION;
    
        WAITFOR
        ( RECEIVE TOP(1)
            @RecvReqDlgHandle = conversation_handle,
            @RecvReqMsg = message_body,
            @RecvReqMsgName = message_type_name
          FROM TargetQueueIntAct
        ), TIMEOUT 5000;
    
        IF (@@ROWCOUNT = 0)
        BEGIN
          ROLLBACK TRANSACTION;
          BREAK;
        END
    
        IF @RecvReqMsgName =
           N'//AWDB/InternalAct/RequestMessage'
        BEGIN
           DECLARE @ReplyMsg NVARCHAR(100);
           SELECT @ReplyMsg =
           N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
           SEND ON CONVERSATION @RecvReqDlgHandle
                  MESSAGE TYPE 
                  [//AWDB/InternalAct/ReplyMessage]
                  (@ReplyMsg);
        END
        ELSE IF @RecvReqMsgName =
            N'https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
        BEGIN
           END CONVERSATION @RecvReqDlgHandle;
        END
        ELSE IF @RecvReqMsgName =
            N'https://schemas.microsoft.com/SQL/ServiceBroker/Error'
        BEGIN
           END CONVERSATION @RecvReqDlgHandle;
        END
    
        COMMIT TRANSACTION;
    
      END
    GO
    

İç etkinleştirme belirtmek için hedef sıra alter

  • Kopyalama ve aşağıdaki kodu bir Query Editor penceresine yapıştırın.Then, run it to specify that Service Broker activate the TargetActiveProc stored procedure to process messages from TargetQueueIntAct. Service Broker will run a copy of TargetActiveProc any time a message is received in TargetQueueIntAct and no copy of the procedure is already running.Service Broker will run additional copies of TargetActiveProc whenever the existing copies do not keep up with the number of incoming messages.

    ALTER QUEUE TargetQueueIntAct
        WITH ACTIVATION
        ( STATUS = ON,
          PROCEDURE_NAME = TargetActivProc,
          MAX_QUEUE_READERS = 10,
          EXECUTE AS SELF
        );
    GO
    

Sonraki Adımlar

Başarıyla yapılandırdınız AdventureWorks2008R2 arasında bir görüşme desteklemek için //AWDB/InternalAct/InitiatorService ve //AWDB/InternalAct/TargetService.Daha sonra yapılandırma'yı kullanarak konuşma tamamlayacak. See Ders 3: Görüşme başlangıç ve iletileri gönderme.