次の方法で共有


サーバー コンテキストランダウン ルーチン

サーバーがクライアントの代わりにコンテキストを維持している間に通信が中断された場合、特定のクライアントに代わってサーバーによって維持される状態をクリーンアップするためにクリーンアップ ルーチンが必要になる場合があります。 このクリーンアップ ルーチンは、コンテキスト ランダウン ルーチンと呼ばれます。 接続が切断されると、サーバー スタブとランタイム ライブラリは、クライアントによって開かれるすべてのコンテキスト ハンドルでこのルーチンを呼び出します。

コンテキスト ランダウン ルーチンは必須であり、型定義に [context_handle] 属性を適用すると、暗黙的に宣言され、名前が付けられます。 [context_handle] 属性がパラメーターに直接適用された場合、サーバーはコンテキスト ランダウン ルーチンを呼び出しません。

コンテキスト ランダウン ルーチンの構文は次のとおりです。

void __RPC_USER type-id_rundown (type-id);

型名によってコンテキスト ランダウン ルーチンの名前が決まります。

次のコード フラグメントは、サンプル コンテキストランダウン ルーチンを示します。 コンテキスト ハンドル を使用したインターフェイス開発、コンテキスト ハンドル を使用したサーバー開発、およびコンテキスト ハンドルを使用したクライアント開発 の例で使用する RemoteClose プロシージャを呼び出。 このプロシージャは、ファイル ハンドルを閉じ、ファイルに関連付けられているメモリを解放し、コンテキスト ハンドル NULL を割り当てます。 NULL の割り当ては RemoteClose 関数を呼び出した結果であり、ランダウン シナリオでは必要ありません。 RPC ランタイムは、コンテキスト ハンドルが NULL に設定されているかどうかに関係なく、状態をクリーンアップします。

//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.  
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(
    PCONTEXT_HANDLE_TYPE phContext)
{
    printf("Client died with an open file, closing it..\n");
    RemoteClose(&phContext);
    assert(phContext == 0);
}