次の方法で共有


SPI の名前空間プロバイダー アーキテクチャ

さまざまな種類の名前空間のクエリを実行し、サポートされている場合は名前空間内に情報を登録するために使用されるプログラム インターフェイスは、大きく異なります。 名前空間プロバイダーは、ローカルに常駐するアプリケーションであり、Windows Sockets 名前空間 SPI と、ローカルに実装したり、ネットワーク経由でアクセスしたりできる既存の名前空間の間でマップできます。 これを次に示します。

名前空間プロバイダーの図

手記

特定の名前空間 (DNS など) で、特定のコンピューターに複数の名前空間プロバイダーがインストールされている可能性があります。

 

前述のように、サービスという一般的な用語は、クライアント/サーバー アプリケーションのサーバーの半分を指します。 Windows ソケットでは、サービスはサービス クラスに関連付けられます。また、特定のサービスの各インスタンスには、サービス クラス内で一意である必要があるサービス名があります。 サービス クラスの例としては、FTP Server、SQL Server、XYZ Corp. Employee Info Server などがあります。

この例で説明するように、一部のサービス クラスはよく知られていますが、他のサービス クラスは一意であり、特定の垂直アプリケーションに固有のものです。 どちらの場合も、すべてのサービス クラスはクラス名とクラス識別子の両方で表されます。 クラス名は必ずしも一意である必要はありませんが、クラス識別子は一意である必要があります。 グローバル一意識別子 (GUID) は、サービス クラス ID を表すために使用されます。 既知のサービスでは、クラス名とクラス識別子 (GUID) が事前に割り当てられており、マクロは TCP ポート番号と対応するクラス識別子 GUID などの間で変換できます。 その他のサービスの場合、開発者はクラス名を選択し、Uuidgen.exe ユーティリティを使用してクラス識別子の GUID を生成します。

サービス クラスの概念は、特定のサービスのすべてのインスタンスで共通に保持される一連の属性を確立できるようにするために存在します。 この属性のセットは、サービス クラスの定義時に Windows ソケットに提供され、サービス クラス スキーマ情報と呼ばれます。 Ws2_32.dll は、この情報をすべてのアクティブな名前空間プロバイダーに中継します。 サービスのインスタンスがインストールされ、ホスト コンピューターで使用可能になると、そのサービス名を使用して、この特定のインスタンスが名前空間に認識されている可能性がある他のインスタンスと区別されます。

サービス クラスのインストールは、サービスを利用できるすべてのクライアントではなく、サービスが実行されるコンピューターでのみ行う必要があることに注意してください。 可能な場合、Ws2_32.dll は、サービスのインスタンスが登録されたとき、またはサービス クエリが開始されたときに、サービス クラス スキーマ情報を名前空間プロバイダーに提供します。 Ws2_32.dll では、この情報自体は格納されませんが、このデータを提供する機能を示した名前空間プロバイダーから取得しようとします。 Ws2_32.dll がサービス クラス スキーマを提供できる保証がないため、この情報を必要とする名前空間プロバイダーには、名前空間固有の手段を使用して取得するためのフォールバック メカニズムが必要です。

インターネット ドメイン ネーム システムには、サービス クラススキーマ情報を格納するための明確に定義された手段がありません。 その結果、DNS 名前空間プロバイダーは、サービス クラス GUID が事前に割り当てられている既知の TCP/IP サービスにのみ対応できます。 実際には、サービス クラス GUID は TCP ポートと UDP ポートのセット全体に事前割り当てされており、マクロを使用して TCP または UDP ポートに関連付けられている GUID を取得できるため、これは重大な制限ではありません。 したがって、ftp、telnet、whois などの使い慣れたサービスはすべて十分にサポートされています。 これらのサービスに対してクエリを実行する場合、規則により、ターゲット コンピューターのホスト名がサービス インスタンス名になります。

サービス クラスの例を引き続き使用すると、ftp サービスのインスタンス名は "alder.intel.com" または "rhino.microsoft.com" になり、XYZ Corp. Employee Info Server のインスタンスには "XYZ Corp. Employee Info Server Version 3.5" という名前が付けられます。 最初の 2 つのケースでは、ftp のサービス クラス GUID とコンピューター名 (サービス インスタンス名として指定) の組み合わせによって、目的のサービスが一意に識別されます。 3 番目のケースでは、サービスが存在するホスト名をサービス クエリ時に検出できるため、サービス インスタンス名にホスト名を含める必要はありません。