Поделиться через


Отсоединение сетевого модуля

Присоединенная пара сетевых модулей отсоединяется друг от друга при отмене регистрации клиентского модуля или модуля поставщика с помощью регистратора сетевых модулей (NMR). Клиентский модуль отменяет регистрацию с помощью NMR путем вызова функции NmrDeregisterClient и модуля поставщика отменяет регистрацию с помощью NMR путем вызова функции NmrDeregisterProvider. На следующей схеме показаны сетевые модули, инициирующие отмену регистрации.

схема , показывающая сетевые модули, инициирующие процесс дерегистрации.

Если любой из сетевых модулей отменяет регистрацию в NMR, NMR вызывает функции обратного вызова как для клиентского модуля ClientDetachProvider, так и для модуля поставщика ProviderDetachClient, чтобы инициировать отключение сетевого модуля. На следующей схеме показана функция NMR, инициирующая отсоединение.

схема , показывающая, что NMR инициирует отсоединение сетевых модулей.

Если клиентский модуль не может немедленно отключиться от модуля поставщика, он вызывает функцию NmrClientDetachProviderComplete после того, как завершит отключение от модуля поставщика. Аналогичным образом, если модуль поставщика не может отсоединиться от клиентского модуля немедленно, он вызывает функцию NmrProviderDetachClientComplete после того, как завершит отсоединение от клиентского модуля. На следующей схеме показаны сетевые модули, которые завершают отсоединение.

Диаграмма, отображающая сетевые модули, выполняющие процесс отсоединения.

После того как клиентский модуль и модуль поставщика завершили отсоединение друг от друга, NMR вызывает функцию обратного вызова клиентского модуля ClientCleanupBindingContext и функцию обратного вызова модуля поставщика ProviderCleanupBindingContext, чтобы сетевые модули могли очистить соответствующие контексты привязки для присоединения. На следующей схеме показана очистка, инициируемая NMR.

Диаграмма, отображающая очистку NMR после отсоединения сетевых модулей.

Если клиентский модуль не зарегистрирован с помощью NMR, отмена регистрации клиентского модуля не завершена, пока клиентский модуль полностью отсоединился от всех модулей поставщика, к которым он был подключен ранее, и все эти модули поставщика полностью отсоединились от клиентского модуля. Клиентский модуль ожидает завершения отмены регистрации, вызвав функцию NmrWaitForClientDeregisterComplete. Аналогичным образом, если модуль поставщика дерегистрирован с помощью NMR, отмена регистрации модуля поставщика не завершена, пока модуль поставщика полностью отсоединился от всех клиентских модулей, к которым он был подключен ранее, и все эти клиентские модули полностью отсоединились от модуля поставщика. Модуль поставщика ожидает завершения дерегистрации путем вызова функции nmrWaitForProviderDeregisterComplete. На следующей схеме показаны сетевые модули, ожидающие завершения дерегистрации.

схема , показывающая сетевые модули, ожидающие завершения дерегистрации.