次の方法で共有


プロトコル シーケンスの指定

サーバー アプリケーションは、ネットワーク経由でクライアントと通信するときに使用する 1 つ以上のプロトコル シーケンスを選択する必要があります。 プロトコル シーケンスの選択は、ネットワークに依存します。 「バインディング情報の解釈」と「プロトコル シーケンスの選択」を参照してください。

サーバー プログラムでは、ネットワークでサポートされている任意のプロトコル シーケンスを使用してクライアントが接続できる場合があります。 これを行うには、 RpcServerUseAllProtseqs を呼び出し、RPC_C_PROTSEQ_MAX_REQS_DEFAULTを最初のパラメーターとして渡します。 ただし、これは推奨される方法ではありません。 代わりに、ローカル呼び出しに ncalrpc を使用し、リモート呼び出しに ncacn_ip_tcp または ncacn_http を使用するだけで十分です。 異種ネットワークは一般的ではありません。事実上すべてのネットワークが TCP/IP をサポートしています。

クライアントで動的エンドポイントのポート割り当てを特定のポート範囲に制限する場合は、代わりに RpcServerUseAllProtseqsEx を呼び出します。 この関数は Microsoft RPC に固有であり、ファイアウォールを通過するリモート プロシージャ 呼び出しに非常に役立ちます。 追加のパラメーターを使用して、ポート割り当て制御フラグを関数に渡します。 「ポート割り当てと選択的バインディング用のレジストリの構成」を参照してください。

サーバーのインターフェイスを開発するときに、MIDL ファイルでプロトコル シーケンスとエンドポイント情報を指定できます。 その場合、サーバーは RpcServerUseAllProtseqsIf を使用して、IDL ファイルに提供されるすべてのプロトコル シーケンスと関連付けられたエンドポイント情報を登録する必要があります。 さらに、対応する RpcServerUseAllProtseqsIfEx 関数があり、サーバーがポート割り当て制御フラグを渡すこともできます。

指定したプロトコル シーケンスと通信するようにクライアント プログラムとサーバー プログラムを構成する場合、サーバー アプリケーションは RpcServerUseProtseq を呼び出す必要があります。 Microsoft RPC プロトコル シーケンスの完全な一覧については、「 プロトコル シーケンス定数」を参照してください。

また、Microsoft RPC には RpcServerUseProtseqEx も用意されており、アプリケーションで特定のプロトコル シーケンスを選択し、動的ポート割り当てを制御できます。

Microsoft RPC では、接続指向プロトコルに加えて、データグラム (コネクションレス) プロトコルもサポートされています。 接続指向プロトコルをお勧めします。データグラム プロトコルは、接続指向プロトコルとは異なる機能セットを持ち、分散システム開発者がデータグラム プロトコルでのみ使用できる機能を必要とする場合にのみ使用する必要があります。 データグラム プロトコルを使用するときに使用できる機能の一部を次に示します。

  • データグラムでは、UDP および IPX コネクションレス トランスポート プロトコルがサポートされています。
  • 接続を確立して維持する必要がないため、データグラム RPC プロトコルの必要なリソースオーバーヘッドは少なくなります。
  • データグラムを使用すると、より高速なバインドが可能になります。
  • 接続指向 RPC と同様に、データグラム RPC 呼び出しは既定では 非べき等です。 つまり、呼び出しは複数回実行されないことが保証されます。 ただし、1 つのクライアント要求に応答して関数を複数回実行しても無害であることを RPC に伝える IDL ファイルでは、関数をべき等としてマークできます。 これにより、サーバー上の状態を維持する時間を短縮できます。 べき等の呼び出しは、不安定なネットワーク上のまれな状況でのみ再実行されることに注意してください。
  • Datagram RPC では、 ブロードキャスト IDL 属性がサポートされています。 ブロードキャストを使用すると、クライアントは同時に複数のサーバーにメッセージを発行できます。 これにより、クライアントはネットワーク上で使用可能な複数のサーバーの 1 つを検索したり、複数のサーバーを同時に制御したりできます。 データグラム ブロードキャストはローカル リンク内でのみ有効であり、通常はルーターをまたがらない点に注意してください。 ブロードキャスト呼び出しは暗黙的にべき等です。 呼び出しに [out] パラメーターが含まれている場合は、最初のサーバー応答のみが返されます。 サーバーが応答すると、そのバインド ハンドルに対するすべての今後の RPC は、ブロードキャスト属性を持つ呼び出しを含め、そのサーバーにのみ送信されます。 別のブロードキャストを送信するには、新しいバインド ハンドルを作成するか、既存のハンドルで RpcBindingReset を呼び出します。
  • Datagram RPC では、 maybe IDL 属性がサポートされています。 これにより、クライアントは応答や確認を待たずにサーバーに呼び出しを送信できます。 呼び出しに [out] パラメーターを含めることはできません。 [maybe] 呼び出しを使用した呼び出しは、暗黙的にべき等です。