2017-09-29 61 views
1

我是新來的Service Broker服務代理 - 如何響應的消息,不同的隊列

消息類型

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c03/RequestMessage] 
VALIDATION = WELL_FORMED_XML 
GO 

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c03/ResponseMessage] 
    VALIDATION = WELL_FORMED_XML 
GO 

合同

CREATE CONTRACT [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract] 
(
    [http://ssb.csharp.at/SSB_Book/c03/RequestMessage] SENT BY INITIATOR, 
    [http://ssb.csharp.at/SSB_Book/c03/ResponseMessage] SENT BY TARGET 
) 
GO 

隊列

0上述
CREATE QUEUE InitiatorQueue 
    WITH ACTIVATION 
    (
     STATUS = ON, 
     PROCEDURE_NAME = [ProcessResponseMessage], 
     MAX_QUEUE_READERS = 1, 
     EXECUTE AS SELF 
    ) 

CREATE QUEUE TargetQueue 
    WITH ACTIVATION 
    (
     STATUS = ON, 
     PROCEDURE_NAME = [ProcessRequestMessage], 
     MAX_QUEUE_READERS = 1, 
     EXECUTE AS SELF 
    ) 

服務

CREATE SERVICE InitiatorService 
ON QUEUE InitiatorQueue 
(
    [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract] 
) 
GO 

CREATE SERVICE TargetService 
ON QUEUE TargetQueue 
(
    [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract] 
) 
GO 

代碼是例子。

問題是我想將消息響應到另一個隊列(例如ErrorQueue)而不是InitiatorQueue。我對Google進行了研究,但是找不到與我的問題相關的任何資源。

我有一些想法,但不知道它的工作:

  1. 添加另一個消息類型爲合同:
    [http://ssb.csharp.at/SSB_Book/c03/ErrorMessage] SENT BY INITIATOR
    但我不知道是否將其設置爲發起者,目標或任何
  2. 爲它創建另一個合同,如果這是解決方案,請提供一個例子。

感謝

+0

我正在尋求解決方案,而不是代碼。 –

回答

1

上隊列中的事處理信息可以做出的選擇,以什麼做的。如果您想發送到不同的隊列,則需要發送不同的對話,因爲通過與原始消息所發送的對話發送相同的對話將會將其發送回發送消息的位置。您需要另一種消息類型,合同,隊列和服務來發送該錯誤消息。讓我知道,如果這不足以讓你走,我可以進一步闡述。

+0

好吧...我正在嘗試 –

+0

它的工作。謝謝 ! –