我们有一个正在运行的(大多数情况下)Service Broker设置。一个问题是我们忘记EndTransmission
在合同中添加消息类型(),所以我创建了一个新合同并将其添加到两个服务中。
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不属于服务合同。我还需要做其他事情吗?因为我在可用性组中,所以我无法设置新经纪人。
我试图在一项服务上有两个合同。据我所知,这是可以接受的。我知道添加第二个合同时不会出现错误。
您的新合同应包括先前合同的所有消息以及新消息。您只需要将合同绑定到目标服务即可。
该错误似乎表明您仍在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]) ;
现在使用新合同开始所有新对话框。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句