呼び出し間のサーバーでの状態の維持

多くの場合、個別の RPC 呼び出しの間にサーバー上の状態を維持する必要があります。これを行うには、コンテキスト ハンドルを使用するのが最適な方法です。 コンテキストハンドルがどのように内部的に動作するかについてのいくつかの言葉は、コンテキストが最もうまく機能するタイミングを理解するのに役立ちます。

クライアントは、サーバー上に保持されている状態を受け取ることはありません。 ほとんどの場合、サーバー上の状態はメモリ ブロックへのポインターであり、クライアントにはそれに関する情報がありません。 すべてのクライアントが受け取る一意の数値は大きく、他の情報はサーバーがクライアントに送信し、後続のすべての操作のコンテキスト ハンドルを表します。 クライアントは、開かれたハンドルを参照するたびに、そのコンテキスト ハンドルが開かれたときにサーバーから受信した大量のハンドルを送信します。

サーバーは、クライアントに送信されるすべての大きな数を追跡します。 サーバーは、コンテキスト ハンドルを表す多数を受け取ると、そのクライアントの有効で未処理のコンテキスト ハンドルのコレクション内の番号を検索し、指定された多数に対応するサーバー側コンテキストを検索します。 これはサーバー ルーチンに渡されます。 大きな数が見つからない場合は、RPC_X_SS_CONTEXT_MISMATCH例外が発生し、クライアントに反映されます。

この設計の補助は次のとおりです。

  • コンテキスト ハンドルは、既存のクライアント/サーバー セッションのコンテキストでのみ有効です。 別のクライアントに渡すことはできません。
  • サーバーが再起動された場合、またはクライアントへの接続が失われると、コンテキスト ハンドルが無効になります。
  • クライアントは、サーバー上のコンテキスト ハンドルが何を表しているのかを解釈できません。 クライアントでは、すべてのコンテキスト ハンドルは単に大きな数値です。

クライアントが失敗した場合、サーバーは通知を受け取り、ランダウン メカニズムを使用してコンテキスト ハンドルをクリーンします。