2015-04-23 35 views
1

我們有一個工作(主要是)Service Broker安裝程序。一個問題是,我們忘記向合同添加消息類型(EndTransmission),所以我創建了一個新合同並將其添加到兩個服務中。將服務合同添加到Service Broker中的服務之後

CREATE CONTRACT [http://bob.us/Locations/Contracts/VolatileData3] 
([http://bob.us/Locations/MessageTypes/Resource/EndTransmission] SENT BY ANY) 

ALTER SERVICE [//Locations/Here/Send/VolatileDataReceiveService] 
    (ADD CONTRACT [http://bob.us/Locations/Contracts/VolatileData3]) ; 

ALTER SERVICE [//Locations/Here/Send/VolatileDataSendService] 
    (ADD CONTRACT [http://bob.us/Locations/Contracts/VolatileData3]) ; 

我仍然收到EndTransmission不屬於服務合同的錯誤。我需要做其他事嗎?我無法設置新代理,因爲我處於可用性組中。

我想在一個服務上有兩個合同。據我所知,這是可以接受的。我知道在添加第二份合同時我沒有遇到錯誤。

回答

1

您的新合同應包含來自上一份合同的所有消息,新消息。您只需要將合同綁定到目標服務。

錯誤似乎表明您仍然使用BEGIN DIALOG中的舊合同。

舉個例子:假設你有這樣的使用兩個消息類型的合同:

CREATE CONTRACT [http://bob.us/Locations/Contracts/VolatileData1] 
([http://bob.us/Locations/MessageTypes/Resource/Request] SENT BY INITIATOR, 
[http://bob.us/Locations/MessageTypes/Resource/Response] SENT BY TARGET); 
CREATE SERVICE [//Locations/Here/Send/VolatileDataReceiveService] ON [...] 
([http://bob.us/Locations/Contracts/VolatileData1]) ; 

,現在你意識到你需要添加EndTransmision消息類型。您將創建一個包含所有三種消息類型的新合同:

CREATE CONTRACT [http://bob.us/Locations/Contracts/VolatileData2] 
([http://bob.us/Locations/MessageTypes/Resource/Request] SENT BY INITIATOR, 
[http://bob.us/Locations/MessageTypes/Resource/Response] SENT BY TARGET, 
[http://bob.us/Locations/MessageTypes/Resource/EndTransmission] SENT BY ANY); 
ALTER SERVICE [//Locations/Here/Send/VolatileDataReceiveService] 
(ADD CONTRACT [http://bob.us/Locations/Contracts/VolatileData2]) ; 

現在開始使用新合同的所有新對話框。

+0

你是對的先生。發佈這個問題後不久,我意識到我添加了合同,但消息仍然在舊的。 – SteveB