我们有两个队列,SSBInitiator 和 SSBTarget。在我的示例情况下,我运行了以下代码来创建对话:
BEGIN DIALOG CONVERSATION @ConversationHandle
FROM SERVICE [//BLAH/Events/SSBInitiator]
TO SERVICE '//BLAH/Events/SSBTarget'
ON CONTRACT [//BLAH/Events/SSBContract]
WITH ENCRYPTION = OFF;
现在让我们说,出于某种原因我认为这个对话是不必要的:要么用户取消了请求,要么发生了其他事情。我知道我可以使用以下任一方式结束对话:
end conversation @ConversationHandle
或者
END CONVERSATION @ConversationHandle
WITH ERROR = 1 DESCRIPTION = 'Ending Convo cause reasons';
现在,对话结束并且没有消息被发送,Target 服务是否需要对对话做任何事情?IE,是否需要进行额外的处理以确保对话完全关闭?
来自微软文档:
如果只有一方结束对话,则对话元数据保持有效。
可
END CONVERSATION ... WITH CLEANUP
用于清理任何未结束的对话。Remus Rusanu 在这里有一篇优秀的文章展示了如何做到这一点。