次の方法で共有


ネットワークでサーバーを使用できるようにする

サーバー アプリケーションがリモート プロシージャ コールを受け入れる前に、ネットワーク上で使用できるようにする必要があります。 これを行うために、サーバーは RPC ランタイムに対して、1 つ以上のプロトコル シーケンスの呼び出しを受け入れる意思があることを示します。 サーバー アプリケーションでサポートされるプロトコル シーケンスの選択は重要な決断です。異なるプロトコル シーケンスには、非常にさまざまな機能があります。 呼び出しをローカルで受信することが想定されるサーバーでは、ncalrpc を使用する必要があります。 リモート呼び出しを受け入れるサーバーは、ncacn_ip_tcp を使用する必要があります。 サーバーでは、呼び出しを受信するプロトコル シーケンスが、実際にそうなのか確認する必要はありません。 詳細については、「同じプロセスで実行中の他の RPC エンドポイントに注意する」を参照してください。

次のコード例では、ncacn_ip_tcp を使用します。

ほとんどのサーバー プログラムでは、ネットワーク上で使用可能なすべてのプロトコル シーケンスが使用されます。 これを行うには、次のコード フラグメントに示すように RpcServerUseProtseq 関数を呼び出します。

RPC_STATUS status;
status = RpcServerUseProtseq(
    L"ncacn_ip_tcp",
    RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    // Protseq-dependent parameter
    NULL);                             // Always specify NULL here.

RpcServerUseProtseq 関数に対する最初のパラメーターはプロトコル シーケンスです。 2 番目のパラメーターは、プロトコル シーケンスに依存します。 コード例に示すように、ほとんどのサーバー プログラムでは、そのパラメーターを RPC_C_PROTSEQ_MAX_REQS_DEFAULT に設定します。 この値により、既定値を使用するように RPC ライブラリが設定されます。 3 番目のパラメーターはセキュリティ記述子であり、アプリでは使用しないでください。 詳細については、「セキュリティ (RPC)」を参照してください。

RpcServerUseProtseqExRpcServerUseProtseqExRpcServerUseProtseqEp、または RpcServerUseProtseqEpEx 関数を呼び出すこともできます。

サーバー アプリケーションで 1 つ以上のプロトコル シーケンスを選択した後、動的エンドポイントを使用するサーバーでは、使用するプロトコル シーケンスごとにバインディング情報を作成する必要があります。 サーバーはバインド情報をバインド ベクターに格納し、エンドポイント マッパー サービスにエクスポートできます。

次の例に示すように、RpcServerInqBindings 関数を使用して、サーバー アプリケーションのバインド ベクターを取得します。

RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
 
status = RpcServerInqBindings(&rpcBindingVector);

RpcServerInqBindings 関数に渡される唯一のパラメーターは、RPC_BINDING_VECTOR 構造体に対するポインターです。 RPC ランタイム ライブラリは、バインド ベクターの配列を動的に割り当て、そのパラメーター変数 (この場合は rpcBindingVector) に配列のアドレスを格納します。 サーバー アプリがそのバインド ベクターの使用を完了 (適切な関数に渡された後など) すると、サーバー アプリは RpcBindingVectorFree 関数を使用してそのバインド ベクターを解放する役割を担います。