Sql-Server
目標服務是否需要為結束的對話做任何事情?
我們有兩個隊列,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 才能完成對話。
如果只有一方結束對話,則對話元數據保持有效。
可
END CONVERSATION ... WITH CLEANUP
用於清理任何未結束的對話。Remus Rusanu 有一篇很棒的文章展示瞭如何做到這一點。