Compartir a través de


Mantenimiento del estado en el servidor entre llamadas

A menudo es necesario mantener el estado en el servidor entre llamadas RPC independientes: el uso de identificadores de contexto es la mejor manera de hacerlo. Algunas palabras sobre cómo funcionan internamente los identificadores de contexto ayudan a comprender cuándo funciona mejor el contexto.

El cliente nunca recibe el estado mantenido en el servidor. La mayoría de las veces, el estado del servidor es un puntero a un bloque de memoria y el cliente no tiene información sobre él. Todo lo que recibe el cliente es un gran número único, con otra información asociada, que el servidor envía al cliente y que representa el identificador de contexto en todas las operaciones posteriores. Cada vez que el cliente hace referencia a un identificador abierto, envía el gran número que recibió del servidor cuando se abrió ese identificador de contexto.

El servidor realiza un seguimiento de todos los números grandes que envía a un cliente. Cuando el servidor recibe un gran número que representa un identificador de contexto, busca el número en la colección de identificadores de contexto válidos y pendientes para ese cliente y busca el contexto del lado servidor correspondiente a un número grande determinado. Esto se pasa a la rutina del servidor. Si no se encuentra el número grande, se genera una excepción de RPC_X_SS_CONTEXT_MISMATCH y se propaga al cliente.

Los corolares de este diseño son los siguientes:

  • Un identificador de contexto solo es válido en el contexto de la sesión de cliente o servidor existente. No se puede pasar a otro cliente.
  • Un identificador de contexto no es válido si el servidor se reinicia o pierde su conexión al cliente.
  • El cliente no puede interpretar lo que representa el identificador de contexto en el servidor. Para un cliente, todos los identificadores de contexto son simplemente números grandes.

Si se produce un error en el cliente, el servidor recibirá una notificación y limpiará sus identificadores de contexto mediante el mecanismo de ejecución.