RpcBindingBind 関数 (rpcasync.h)
RpcBindingBind 関数は、RPC サーバーにアクセスし、それにバインドします。
構文
RPC_STATUS RpcBindingBind(
[in, optional] PRPC_ASYNC_STATE pAsync,
[in] RPC_BINDING_HANDLE Binding,
[in] RPC_IF_HANDLE IfSpec
);
パラメーター
[in, optional] pAsync
非同期呼び出し情報を含む RPC_ASYNC_STATE 構造体へのポインター。 この状態情報には、バインド操作が完了したときに通知するために使用される完了メソッドが含まれています。
[in] Binding
RPC_BINDING_HANDLERpcBindingCreate の以前の呼び出しで作成されたバインディング ハンドルを含む構造体です。
[in] IfSpec
RPC_IF_HANDLE このバインド ハンドルの呼び出しを行うインターフェイスを指定する値です。
戻り値
この関数は、成功したRPC_S_OKを返します。それ以外の場合は、RPC_S_* エラー コードが返されます。 これらのエラー コードの詳細については、「 RPC 戻り値」を参照してください。
リターン コード | 説明 |
---|---|
|
RPC はサーバーに正常にバインドされ、リモート呼び出しを行うことができます。 |
|
このバインド操作に対して RPC の廃止された機能が要求されました。 |
注釈
RpcBindingBind は RPC サーバーに接続し、 RpcBindingCreate の以前の呼び出しによって返されたバインド ハンドルを使用して、そのサーバーにバインドします。 このメソッドを使用して確立されたバインド ハンドルは、"高速" バインド ハンドルと呼ばれます。
pAsync パラメーターの値が NULL でない場合、バインドは非同期になり、指定された非同期状態で RpcAsyncCancelCall と RpcAsyncGetCallStatus の呼び出しを行うことができます。 バインドが完了したことを呼び出し元に通知するために使用される非同期状態情報 wis で指定された完了メソッド。 完了の通知時に、新しくバインドされたバインド ハンドルを使用して呼び出しを行うことができます。
バインド メソッドは、バインド ハンドルを使用して実行できる呼び出しを決定しません。バインドが同期の場合は、バインド ハンドルで非同期呼び出しを行うことができます。その逆も同様です。 バインド メソッドは、成功したバインドの通知を通知する方法を決定します。具体的には、非同期バインドの場合は 。
この API は RPC サーバーとメッセージを交換するため、ネットワーク トラフィックやサーバー のブロックなど、さまざまな独立した要因に基づいてバインド操作に時間がかかる場合があります。 バインドが同期の場合、サーバーがブロックされている場合、バインド操作はブロックできます。
バインドが完了すると、バインド ハンドルに対して行われた呼び出しのセマンティクスは、他の種類のバインド ハンドルで行われた呼び出しと同じですが、次に示す 4 つの顕著な違いがあります。
- このバインド ハンドルのすべての呼び出しは、 IfSpec で指定されたインターフェイスで行う必要があります。 バインド ハンドルは、このインターフェイスに一意に関連付けられます。 インターフェイス自体はバインド ハンドルが破棄される前にアンロードできますが、インターフェイスに関する広範な情報はバインド ハンドルにキャッシュされ、別のインターフェイスに対して同じバインド ハンドルで呼び出しが行われた場合、結果は未定義になります。
- RPC コールバックはバインド ハンドルでは許可されません。 RPC サーバーが [callback] 属性を持つメソッドを使用してコールバックを行おうとすると、RPC_S_CANNOT_SUPPORTエラー状態コードを使用して呼び出しが拒否されます。
- クラシック バインド ハンドルを使用すると、接続が切断された場合、RPC はサーバーとの透過的な再接続を試みます。 高速バインディング ハンドルの場合、RPC はサーバーへの透過的な再接続を試みません。代わりに、RPC_S_SERVER_UNAVAILABLE、RPC_S_CALL_FAILED、RPC_C_CALL_FAILED_DNEのいずれかのエラーが返されます。 資格情報が拒否されたために接続が切断された場合は、RPC_S_ACCESS_DENIEDが返されます。メモリ不足によりサーバーで一時的なエラーが発生した場合は、RPC_S_OUT_OF_MEMORYが返されます。 その他の接続エラーは、サーバー ルーチンによって返されるエラーをマーシャリングまたはマーシャリング解除した結果です。接続が失われた場合、呼び出された は RpcBindingUnbind を呼び出してバインドを解除し、 RpcBindingBind の別の呼び出しで再バインドする必要があります。
RpcBindingBind の呼び出しが失敗した場合、バインド ハンドルはサーバーにバインドされず、呼び出し元は同じ API への別の呼び出しで再度バインドを試みることができます。または、バインド ハンドルを解放することもできます。 失敗したバインド操作ではバインド ハンドルがバインド状態に移動されないため、 RpcBindingUnbind を呼び出さないでください。
バインド操作が完了を通知するまで、特定の関数を呼び出さないでください。具体的には次のとおりです。
- RpcBindingFree
- RpcBindingReset
- RpcBindingSetAuthInfo と RpcBindingSetAuthInfoEx
- RpcBindingSetObject
- RpcBindingSetOption
- RpcMgmtSetComTimeout
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista、SP2 を使用した Windows XP [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008、Windows Server 2003 SP1 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | rpcasync.h (Rpc.h を含む) |
Library | Rpcrt4.lib |
[DLL] | Rpcrt4.dll |