Sql-Server

目標服務是否需要為結束的對話做任何事情?

  • November 3, 2020

我們有兩個隊列,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 有一篇很棒的文章展示瞭如何做到這一點

引用自:https://dba.stackexchange.com/questions/211911