クライアント側のバインド

バインド ハンドルは、プロトコル シーケンス、サーバー プログラム ホスト コンピューターの名前またはアドレス、およびサーバー プログラム エンドポイントで構成されます。 そのため、クライアント プログラムはバインディングを作成するために、この情報を取得または提供する必要があります。

クライアント プログラムで自動バインド ハンドルを使用する場合は、バインドを作成または管理するために特別なソース コードを記述する必要はありません。 クライアント スタブは、バインディングの確立と維持に必要な RPC 関数を呼び出します。 必要なのは、クライアントがアプリケーション構成ファイル (ACF) で自動バインド ハンドルを使用するように指定し、それに応じてインターフェイスを設計することです。 詳細については、「 自動バインド ハンドル」を参照してください。

たとえば、リモート タイム スタンプ関数を呼び出すクライアント プログラムを開発しているとします。 ここでは、スタブはすべての作業を行い、クライアントは生成されたヘッダー ファイル Auto.h のみを含めて、リモート プロシージャの関数プロトタイプを取得する必要があります。 リモート プロシージャに対するクライアント アプリケーションの呼び出しは、次の例に示すように、ローカル プロシージャの呼び出しと同じように表示されます。

/* auto handle client application (fragment) */
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include "auto.h"    // header file generated by the MIDL compiler
 
 
void main(int argc, char **argv)
{
    time_t t1;
    time_t t2;
    char * pszTime;
    ...
 
    GetTime(&t1);  // GetTime is a remote procedure
    GetTime(&t2);
 
    pszTime = ctime(&t1);
    printf("time 1= %s\n", pszTime);
 
    pszTime = ctime(&t2);
    printf("time 2= %s\n", pszTime);
 
    Shutdown();    // Shutdown is a remote procedure
    exit(0);
}

前の例でわかるように、クライアント アプリケーションは RPC ランタイム ライブラリ関数を明示的に呼び出す必要はありません。 クライアント スタブによって管理されます。

アプリケーションで暗黙的または明示的なバインド ハンドルを使用する場合、クライアントはバインド情報を取得し、RPC 関数を呼び出してハンドルを作成する必要があります。 クライアントがからバインディング情報を取得する場所は、アプリケーションの要件によって異なります。 クライアント アプリケーションをインストールするセットアップ プログラムは、作成する環境変数にバインド情報を格納できます。 また、アプリケーション固有の構成ファイルにバインド情報を保存することもできます。 環境変数または構成ファイルのバインド情報は通常、文字列として格納されるため、クライアント アプリケーションは文字列をバインドに変換する必要があります。 Windows XP/2000 環境では、バインド情報を Active Directory から取得できます。 詳細については、「 文字列バインディングの使用」を参照してください。

ほとんどのネットワークにはネーム サービスがあります。 サーバー プログラムは、ネーム サービス データベースで自身をアドバタイズできます。 クライアントは、実行を開始すると、ネーム サービス データベースからバインド情報を取得できます。 詳細については、「 Name Service データベースからのインポート」を参照してください。

暗黙的ハンドルと明示的ハンドルを使用したバインドに必要な手順については、次のトピックで説明します。

これらのトピックの概要については、「 クライアントとサーバーの接続」を参照してください。