ネットワーク モジュールのデタッチ

アタッチされているネットワーク モジュールのペアは、クライアント モジュールまたはプロバイダー モジュールのいずれかがネットワーク モジュール レジストラー (NMR) に登録解除されると、互いにデタッチされます。 クライアント モジュールは、NmrDeregisterClient 関数を呼び出すことで NMR への登録を解除し、プロバイダー モジュールは、NmrDeregisterProvider 関数を呼び出すことで、NMR への登録を解除します。 以下の図は、登録解除を開始するネットワーク モジュールを示しています。

Diagram showing network modules initiating deregistration process.

いずれかのネットワーク モジュールが NMR への登録を解除すると、クライアント モジュールの ClientDetachProvider コールバック関数とプロバイダー モジュールの ProviderDetachClient コールバック関数の両方が呼び出され、ネットワーク モジュールのデタッチが開始されます。 以下の図は、デタッチを開始する NMR を示しています。

Diagram showing NMR initiating the detachment of network modules.

クライアント モジュールがプロバイダー モジュールからすぐにデタッチできない場合は、プロバイダー モジュールからのデタッチが完了した後に、NmrClientDetachProviderComplete 関数を呼び出します。 同様に、プロバイダー モジュールがクライアント モジュールからすぐにデタッチできない場合は、クライアント モジュールからのデタッチが完了した後に、NmrClientDetachProviderComplete 関数を呼び出します。 以下の図は、デタッチを完了するネットワーク モジュールを示しています。

Diagram depicting network modules completing the detachment process.

クライアント モジュールとプロバイダー モジュールの両方が互いにデタッチを完了した後、NMR はクライアント モジュールの ClientCleanupBindingContext コールバック関数とプロバイダー モジュールの ProviderCleanupBindingContext コールバック関数を呼び出して、ネットワーク モジュールがアタッチメントのそれぞれのバインディング コンテキストをクリーンアップできるようにします。 以下の図は、NMR によって開始されるクリーンアップを示しています。

Diagram displaying NMR initiating cleanup after network modules detachment.

クライアント モジュールが NMR への登録を解除した場合、クライアント モジュールが以前にアタッチされていたすべてのプロバイダー モジュールから完全にデタッチされ、それらのプロバイダー モジュールがすべてクライアント モジュールから完全にデタッチされるまで、クライアント モジュールの登録解除は完了しません。 クライアント モジュールは、NmrWaitForClientDeregisterComplete 関数を呼び出すことによって、登録解除が完了するのを待ちます。 同様に、プロバイダー モジュールが NMR への登録を解除した場合、プロバイダー モジュールが以前にアタッチされていたすべてのクライアント モジュールから完全にデタッチされ、それらのクライアント モジュールがすべてプロバイダー モジュールから完全にデタッチされるまで、プロバイダー モジュールの登録解除は完了しません。 プロバイダー モジュールは、NmrWaitForProviderDeregisterComplete 関数を呼び出すことによって、登録解除が完了するのを待ちます。 以下の図は、登録解除の完了を待つネットワーク モジュールを示しています。

Diagram showing network modules waiting for deregistration completion.