Función JetSetSessionContext
Se aplica a: Windows | Windows Server
Función JetSetSessionContext
La función JetSetSessionContext asocia una sesión al subproceso actual mediante el identificador de contexto especificado. Esta asociación invalida el requisito predeterminado del motor de que una transacción para una sesión determinada debe producirse completamente en el mismo subproceso.
JET_ERR JET_API JetSetSessionContext(
__in JET_SESID sesid,
__in JET_API_PTR ulContext
);
Parámetros
sesid
Sesión que se va a usar para esta llamada.
ulContext
Identificador único al que se asociará esta sesión.
Valor devuelto
Esta función devuelve el tipo de datos JET_ERR con uno de los siguientes códigos de retorno. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.
Código devuelto |
Descripción |
---|---|
JET_errSuccess |
La operación se ha completado correctamente. |
JET_errClientRequestToStopJetService |
La operación no se puede completar porque toda la actividad de la instancia asociada a la sesión ha dejado de funcionar como resultado de una llamada a JetStopService. |
JET_errInstanceUnavailable |
La operación no se puede completar porque la instancia asociada a la sesión encontró un error irrecuperable que requiere que se revoque el acceso a todos los datos para proteger la integridad de esos datos. Windows XP: Este valor devuelto se introduce en Windows XP. |
JET_errInvalidParameter |
Uno de los parámetros proporcionados contenía un valor inesperado o la combinación de varios valores de parámetro produjo un resultado inesperado. JetSetSessionContext devolverá este error en las condiciones siguientes:
|
JET_errNotInitialized |
La operación no se puede completar porque la instancia asociada a la sesión aún no se ha inicializado. |
JET_errRestoreInProgress |
La operación no se puede completar porque hay una operación de restauración en curso en la instancia asociada a la sesión. |
JET_errSessionContextAlreadySet |
No se pudo asociar la sesión al subproceso actual porque ya se ha asociado a un subproceso. |
JET_errTermInProgress |
La operación no se puede completar porque la instancia asociada a la sesión se está cerrando. |
Si esta función se realiza correctamente, la sesión se asociará al subproceso actual. No se producirá ningún cambio en el estado de la base de datos.
Si se produce un error en esta función, el estado de sesión permanecerá sin cambios. No se producirá ningún cambio en el estado de la base de datos.
Comentarios
Normalmente, una sesión se enlaza a un subproceso específico mientras dure una transacción. Este comportamiento está diseñado para ayudar a las aplicaciones a detectar y evitar el uso compartido conceptualmente incorrecto de una sola sesión entre varios subprocesos. A veces, esta comprobación simple no funciona con la arquitectura de la aplicación. Por ejemplo, si la aplicación hospeda objetos del lado servidor mediante un grupo de subprocesos y las transacciones abarcan varias llamadas de servidor a un objeto determinado, esta protección puede provocar un error en algunas de esas llamadas con JET_errSessionSharingViolation aunque el patrón de uso sea correcto. Esta situación es común para los servidores de objetos COM.
JetSetSessionContext y JetResetSessionContext resuelven este problema haciendo que esta comprobación de uso compartido de sesiones sea un poco más flexible. Cuando la aplicación comienza a realizar una serie de llamadas API de ESE mediante una sesión determinada, primero establece el contexto de sesión en un valor determinado. Esta acción asocia la sesión al subproceso que llama. En el ejemplo dado, este contexto podría ser la dirección del objeto que contiene el identificador de sesión jet. Una vez realizadas las llamadas API de ESE, la aplicación restablece el contexto de sesión. Esta acción desasocia la sesión del subproceso que llama. Después, otro subproceso puede usar el objeto y su sesión, incluso si la sesión tiene una transacción activa.
Es importante tener en cuenta que se debe llamar a JetSetSessionContext antes de abrir una transacción en esa sesión o que la asociación no funcionará.
JetSetSessionContext es seguro para subprocesos. Varios subprocesos pueden intentar establecer un contexto de subproceso en la misma sesión al mismo tiempo y solo uno ganará. La aplicación puede usar este hecho como medio para asignar una sesión desde un grupo sin almacenar el estado externo sobre su asignación.
Requisitos
Requisito | Value |
---|---|
Cliente |
Requiere Windows Vista, Windows XP o Windows 2000 Professional. |
Servidor |
Requiere Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Encabezado |
Declarado en Esent.h. |
Library |
Use ESENT.lib. |
Archivo DLL |
Requiere ESENT.dll. |
Consulte también
JET_API_PTR
JET_ERR
JetResetSessionContext
JET_SESID
JetStopService