網路模組卸離
當用戶端模組或提供者模組與網路模組註冊器(NMR)取消註冊時,一組連結在一起的網路模組會被分離。 用戶端模組會呼叫 NmrDeregisterClient 函式向 NMR 取消註冊,而提供者模組會呼叫 NmrDeregisterProvider 函式向 NMR 取消註冊。 下圖說明起始取消註冊的網路模組。
當任一個網路模組與NMR取消註冊時,NMR會呼叫用戶端模組的 ClientDetachProvider 回呼函式,以及提供者模組的 ProviderDetachClient 回呼函式來起始中斷網路模組的卸離。 下圖說明NMR如何啟動分離過程。
如果用戶端模組無法立即從提供者模組中斷連結,它會在完成從提供者模組中斷連結之後,呼叫 NmrClientDetachProviderComplete 函式。 同樣地,如果提供者模組無法立即從用戶端模組中斷連結,它會在完成與用戶端模組中斷鏈接之後,呼叫 NmrProviderDetachClientComplete 函式。 下圖說明網路模組完成分離。
在用戶端模組和提供者模組完成彼此中斷鏈接之後,NMR 會呼叫用戶端模組的 ClientCleanupBindingContext 回呼函式,以及提供者模組的 ProviderCleanupBindingContext 回呼函式,讓網路模組可以清除附件各自的系結內容。 下圖說明NMR啟動清理過程。
如果用戶端模組已向NMR取消註冊,則在用戶端模組與先前連結的所有提供者模組完全中斷連結,且所有提供者模組已完全與用戶端模組中斷連結之前,才會完成用戶端模組的取消註冊。 用戶端模組會呼叫 NmrWaitForClientDeregisterComplete 函式,等候取消註冊完成。 同樣地,如果提供者模組已向NMR取消註冊,則提供者模組的取消註冊不會完成,直到提供者模組完全與先前連結的所有用戶端模組中斷連結,而且所有用戶端模組都已完全與提供者模組中斷連結。 提供者模組會呼叫 NmrWaitForProviderDeregisterComplete 函式,等候取消註冊完成。 下圖說明等待取消註冊完成的網路模組。