Отсоединение сетевого модуля
Присоединенная пара сетевых модулей отсоединяется друг от друга, когда клиентский модуль или модуль поставщика отменяет регистрацию в регистраторе сетевых модулей (NMR). Клиентский модуль отменяет регистрацию в NMR путем вызова функции NmrDeregisterClient , а модуль поставщика отменяет регистрацию в NMR путем вызова функции NmrDeregisterProvider . На следующей схеме показаны сетевые модули, инициирующие отмену регистрации.
Когда любой сетевой модуль отменяет регистрацию в NMR, nmR вызывает функцию обратного вызова ClientDetachProvider клиентского модуля и функцию обратного вызова ProviderDetachClient модуля поставщика, чтобы инициировать отсоединение сетевого модуля. На следующей схеме показан nmr, инициирующий отсоединение.
Если клиентскому модулю не удается отсоединиться от модуля поставщика немедленно, он вызывает функцию NmrClientDetachProviderComplete после завершения отсоединения от модуля поставщика. Аналогичным образом, если модуль поставщика не может отсоединить себя от клиентского модуля немедленно, он вызывает функцию NmrProviderDetachClientComplete после завершения отсоединения от клиентского модуля. На следующей схеме показаны сетевые модули, завершающие отсоединение.
После завершения отсоединения модуля клиента и модуля поставщика nmR вызывает функцию обратного вызова ClientCleanupBindingContext клиентского модуля и функцию обратного вызова ProviderCleanupBindingContext модуля поставщика, чтобы сетевые модули могли очистить соответствующие контексты привязки для вложения. На следующей схеме показан процесс, инициирующий очистку nmr.
Если клиентский модуль не зарегистрирован в NMR, отмена регистрации клиентского модуля не будет завершена до тех пор, пока клиентский модуль полностью не отсоединится от всех модулей поставщика, к которым он был ранее подключен, и все эти модули поставщика полностью отсоединились от клиентского модуля. Клиентский модуль ожидает завершения отмены регистрации путем вызова функции NmrWaitForClientDeregisterComplete . Аналогичным образом, если модуль поставщика не зарегистрирован в NMR, отмена регистрации модуля поставщика не будет завершена до тех пор, пока модуль поставщика полностью не отсоединится от всех клиентских модулей, к которым он был ранее подключен, и все эти клиентские модули полностью отсоединились от модуля поставщика. Модуль поставщика ожидает завершения отмены регистрации путем вызова функции NmrWaitForProviderDeregisterComplete . На следующей схеме показаны сетевые модули, ожидающие завершения отмены регистрации.