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