次の方法で共有


アドバタイズ サーバー インターフェイス

自動ハンドルを使用するアプリケーションのサーバー側では、 RpcNsBindingExport 関数を呼び出して、サーバーに関するバインディング情報をクライアントで使用できるようにする必要があります。 自動バインド ハンドルには、クライアントからアクセスできるサーバーで実行されているネーム サービスが必要です。 ネーム サービスの Microsoft 実装である Microsoft Locator は、自動ハンドルを管理します。 暗黙的および明示的なバインド ハンドルを使用するサーバー アプリケーションは、ネーム サービス データベースに存在をアドバタイズすることもできます。

通常、サーバーは次のランタイム関数を呼び出します。

/* auto handle server application (fragment) */
 
//interface header file that the MIDL compiler generates
#include "auto.h" 
 
void main(void)
{
    RpcUseProtseqEp(...);
    RpcServerRegisterIf(...);
    RpcServerInqBindings(...);
    RpcNsBindingExport(...);
    ...
}

このコード フラグメント内の最初の 2 つの関数の呼び出しは 、Hello, World の例に似ています。 これらの関数を使用すると、バインディングに関する情報がクライアントで使用できるようになります。 RpcServerInqBindingsRpcNsBindingExport の呼び出しによって、名前サービス データベースに情報が格納されます。 RpcServerInqBindings を呼び出すと、ハンドルがネーム サービスにエクスポートされる前に、バインド ベクターに有効なバインド ハンドルが入力されます。 サーバー プログラムがハンドルをデータベースにエクスポートした後、クライアント (またはクライアント スタブ) は RpcNsBindingImportBeginRpcNsBindingImportNext を呼び出して、この情報を取得できます。 詳細については、「 サーバー ホスト システムの検索」を参照してください。

RpcServerInqBindings および RpcNsBindingExport の呼び出しとそれに関連するデータ構造は、次のようになります。

RPC_BINDING_VECTOR * pBindingVector;
RPCSTATUS status;
 
status = RpcServerInqBindings(&pBindingVector);
 
status = RpcNsBindingExport(
                fNameSyntaxType,      // name syntax type 
                pszAutoEntryName,     // nsi entry name 
                autoh_ServerIfHandle, // if server handle
                pBindingVector,       // set in previous call 
                NULL);                // UUID vector

RpcServerInqBindings パラメーター pBindingVector は、RPC_BINDING_VECTORへのポインターへのポインターであることに注意してください。 また、 RpcNsBindingExport の各呼び出しの後に 、RpcBindingVectorFree の呼び出しが続く必要があります。

ネーム サービス データベースからエクスポートされたインターフェイスを削除するために、サーバーは次のように RpcNsBindingUnexport を呼び出します。

status = RpcNsBindingUnexport(
                fNameSyntaxType, 
                pszAutoEntryName,  
                auto_ServerIfHandle,
                NULL);              // unexport handles only

RpcNsBindingUnexport 関数は、サービスが完全に削除されている場合にのみ使用する必要があります。 メンテナンスのためにサーバーがシャットダウンされている場合など、サービスが一時的に無効になっている場合は使用しないでください。 サーバー・プログラムはネーム・サービス・データベースに自身を登録できますが、サーバーが一時的にオフラインになっているため使用できません。 クライアント アプリケーションには、このような条件の例外処理コードが含まれている必要があります。

ネーム サービス データベースの内容と形式の詳細については、「 RPC Name Service Database」を参照してください。

クライアント プログラムとサーバー プログラムの両方が Windows 2000 で実行されている場合、アプリケーションは Active Directory サービスを利用できます。 クライアント プログラムとサーバー プログラムを実行しているコンピューターは、どちらも Windows 2000 ドメインのメンバーである必要があります。

Active Directory サービスを使用してそのプレゼンスをアドバタイズするには、サーバー プログラムをドメイン管理者のセキュリティ コンテキストで実行する必要があります。 ドメイン ユーザーのコンテキストで実行されている場合、ドメイン管理者は RPC サービス コンテナーのアクセス制御リスト (ACL) を変更する必要があります。 詳細については、Active Directory のドキュメントを参照してください。