Name Service アプリケーション のガイドライン
分散アプリケーションを開発する場合は、アプリケーション ユーザーに名前を指定する方法を提供し、名前サービス データベースにアプリケーションを登録できるようにする必要があります。 このメソッドは、データ ファイル、コマンド ライン入力、またはダイアログ ボックスで構成できます。
RPC ネーム サービス アーキテクチャでは、アプリケーションのサーバー エントリを整理するためのさまざまな方法がサポートされていますが、参照用に最適化されています。 その結果、頻繁に更新すると、ネーム サービスとアプリケーションの両方のパフォーマンスが低下する可能性があります。 情報を不必要にエクスポートしないようにするには、サーバーがその情報がネーム サービス データベース内にあるかどうかを判断できるようにする設計を選択します。 さらに、各サーバー インスタンスは、独自のエントリ名にエクスポートする必要があります。 そうしないと、インスタンスがサポートされているオブジェクト UUID またはプロトコル シーケンスを、別のインスタンスの情報を妨げることなく変更することが困難になります。
次の方法では、ネットワークが使用するネーム サービスに関係なく、これらの落とし穴を回避し、優れたパフォーマンスを提供します。
最初に、特定のサーバー インスタンスが初めて起動するようにアプリケーションを設計し、一意のサーバー エントリ名を選択し、この名前をアプリケーションの他の構成情報と共にレジストリに保存します。 次に、バインド ハンドルとオブジェクト UUID がある場合は、その名前サービス エントリにエクスポートします。
サーバー インスタンスの後続の呼び出しでは、ネーム サービス エントリが存在し、オブジェクト UUID とバインド ハンドルの正しいセットが含まれていることを確認する必要があります。 エントリが見つからない場合は、管理者がそれを削除したか、停電によってネーム サービス情報が失われた可能性があります。 エントリ内のバインド ハンドルが正しいことを確認することが重要です。たとえば、管理者が TCP/IP サポートをコンピューターに追加した場合、RPC サーバーは RpcServerUseAllProtseqs呼び出すときに、そのプロトコル シーケンスをリッスンします。 ただし、サーバーがネーム サービス エントリを更新しない場合、クライアントは TCP がサポートされていることを通知されません。
クライアントがインポートするときは、エントリ名として NULL 指定する必要があります。 NULL を指定すると、Microsoft RPC ライブラリ関数は、クライアント コンピューターのドメインまたはワークグループ内のすべてのネーム サービス エントリ内のインターフェイスを検索し、すべてのインスタンスの情報を検索します。
オブジェクト UUID を使用してプリンターなどの既知のオブジェクトを表す場合は、このメソッドのバリエーションを使用できます。 バインドを 1 つのエントリにエクスポートする代わりに、サポートされているオブジェクト ("/.:/printers/Laser1" や "/.:/printers/Laser2" など) ごとにエントリが作成されるようにアプリケーションを設計します。次に、そのバインド ハンドルを各サーバー エントリにエクスポートし、そのエントリに関連するオブジェクト UUID を取得します。
この場合、クライアントは、関連するサーバー エントリからインポートすることで、名前でリソースを検索できます。リソースのオブジェクト UUID は必要ありません。 リソース UUID を持っていて、名前がない場合は、null エントリからインポートできます。