Compartir a través de


Semántica de errores para identificadores de contexto

En este tema se describe la semántica de errores para los identificadores de contexto.

Semántica de errores cuando se produce un error al cerrar el identificador de contexto

Imagine que una aplicación cliente está intentando cerrar un identificador de contexto que se abrió en el servidor, sin apagar el proceso de cliente. Además, suponga que se produce un error en la llamada al servidor para cerrar el identificador de contexto (por ejemplo, el cliente no tiene memoria). La manera adecuada de controlar esta situación es llamar a la función RpcSsDestroyClientContext . En tal caso, el cliente limpia su lado del identificador de contexto y cierra la conexión al servidor de forma anulativa. Dado que la conexión es realmente un grupo de conexiones (consulte RPC y Network), que se cuenta con una referencia para cada enlace abierto o identificador de contexto, al destruir el identificador de contexto llamando a la función RpcSsDestroyClientContext no realmente destruye la conexión. En su lugar, disminuye el recuento de referencias del grupo de conexiones. Para que las conexiones del grupo se cierren, el cliente debe cerrar todos los identificadores de enlace y los identificadores de contexto para ese servidor desde el proceso de cliente. A continuación, se cierran todas las conexiones del grupo y se inicia y se limpia el mecanismo de ejecución del servidor.

Semántica de errores durante el cambio de estado del identificador de contexto

La información de esta sección hace referencia a Windows XP y plataformas posteriores.

Los identificadores de contexto son simplemente parámetros para una función. Todos los cambios en el estado de un identificador de contexto se producen cuando se calculan las referencias de parámetros o se anulan las referencias. Por ejemplo, si un cliente abre un identificador de contexto (lo cambia de NULL a no NULL), el tiempo de ejecución de RPC no abre realmente la parte RPC del identificador hasta que se calculan las referencias de los argumentos para enviar al cliente. Los errores pueden producirse durante el período intermedio. Debido a una variedad de posibles condiciones de red o de recursos bajos, se podría producir un error en la transmisión del paquete al cliente. O bien, la rutina del servidor puede producir una excepción al intentar cambiar un identificador de contexto. En estas u otras situaciones de error, el cliente y el servidor pueden obtener vistas incoherentes del identificador de contexto. En esta sección se explica la regla para el estado del identificador de contexto y la responsabilidad del código de cliente y servidor durante varias condiciones de error.

  • Llega un identificador de contexto NULL , pero la rutina del servidor encuentra un error y produce una excepción.

    Es responsabilidad de la rutina del servidor limpiar cualquier estado relacionado con el identificador de contexto que pueda haber creado. El tiempo de ejecución de RPC limpia su estado.

  • Llega un identificador de contexto que no es NULL , pero la rutina del servidor encuentra un error y produce una excepción.

    Si la rutina del servidor cerró el identificador de contexto, el cliente no lo sabrá, ya que la llamada no se realizará correctamente; el uso adicional del identificador de contexto producirá un error de RPC_X_SS_CONTEXT_MISMATCH en el cliente. Si la rutina del servidor no modifica el identificador de contexto, el cliente puede seguir utilizándolo. Si la rutina del servidor cambia la información almacenada en el contexto del servidor, las nuevas llamadas del cliente usarán esa información.

  • Llega un identificador de contexto que no es NULL y la rutina del servidor cierra el identificador, pero serializa después de que se haya serializado el identificador de contexto o se haya producido un error en el procesamiento después de que se haya producido un error de serialización.

    El identificador de contexto está cerrado y las llamadas adicionales realizadas por este cliente mediante este identificador de contexto producen un error de RPC_X_SS_CONTEXT_MISMATCH en el cliente.

  • Llega un identificador de contexto NULL y el servidor crea su contexto para este identificador, pero se serializa después de que se haya serializado el identificador de contexto o se haya producido un error en el procesamiento después de que se haya producido un error de serialización.

    En este caso, el tiempo de ejecución de RPC invoca la ejecución para este identificador de contexto y limpia el estado RPC para este identificador de contexto. El identificador de contexto no se creará en el lado cliente.

  • Llega un identificador de contexto que no es NULL y el servidor no cambia el identificador de contexto o cambia la información almacenada en el contexto del servidor y se produce un error en la serialización después de serializar el identificador de contexto.

    Las nuevas llamadas del cliente usarán el identificador de contexto que tiene el servidor.

  • Llega un identificador de contexto NULL y el servidor no lo establece en nada distinto de NULL, pero se produce un error en la llamada antes de serializar el identificador de contexto.

    En este caso, no se crea ningún identificador de contexto en el cliente.

  • Llega un identificador de contexto que no es NULL y el servidor lo establece en NULL, pero se produce un error en la serialización antes de serializar el identificador de contexto.

    En este caso, el identificador de contexto permanece cerrado en el servidor y el cliente obtiene RPC_X_SS_CONTEXT_MISMATCH errores cuando intenta usar el identificador de contexto.

  • Un identificador de contexto NULL llega al servidor y el servidor lo establece en distinto de NULL, pero se produce un error en la serialización antes de serializar el identificador de contexto.

    El identificador de contexto se va a invocar para que el servidor pueda limpiar y no se creará ningún identificador de contexto en el cliente.

  • Llega un identificador de contexto que no es NULL y el servidor no cambia el identificador de contexto o cambia la información almacenada en el contexto del servidor y se produce un error en la serialización antes de que se serializa el identificador de contexto.

    Las nuevas llamadas del cliente usarán el estado en el servidor.

  • Un identificador de contexto se declara como un valor devuelto y la rutina del servidor devuelve NULL para el identificador de contexto y se produce un error en la serialización antes de que se serializa el identificador de contexto.

    En este caso, no se crea ningún contexto nuevo en el cliente.

  • Un identificador de contexto se declara como un valor devuelto y la rutina del servidor devuelve un valor distinto de NULL para el identificador de contexto y se produce un error de serialización antes de serializar el identificador de contexto.

    El tiempo de ejecución de RPC llama a la rutina de ejecución del identificador de contexto para darle la oportunidad de limpiar y no se crea ningún contexto nuevo en el cliente.