| Anterior | Siguiente |
| CONTEXT_E_SYNCH_TIMEOUT | CONTEXT_E_ROLENOTFOUND |
CONTEXT_E_OLDREF
Qué significa CONTEXT_E_OLDREF
CONTEXT_E_OLDREF corresponde al HRESULT 0x8004E007. Windows indica: «Se realizó una llamada a un método de un componente COM+ cuya transacción ya se confirmó o anuló.».
La causa debe buscarse en lifecycle del contexto de objeto y servicios contextuales de COM+. Para esta constante, La referencia pertenece a un contexto o activación ya obsoletos; vuelve a adquirirla desde el contexto vigente. La traza útil debe incluir object context/activity ID, JIT activation, referencia de objeto, flags de contexto y método que solicita el servicio contextual.
Qué comprobar
- Obtén object context/activity ID, JIT activation, referencia de objeto, flags de contexto y método que solicita el servicio contextual en la misma llamada que devuelve el HRESULT y no reinicies COM+ antes de guardar esa evidencia.
- Verifica que «Se realizó una llamada a un método de un componente COM+ cuya transacción ya se confirmó o anuló.» describe el objeto actual y no otro AppID, partición, CLSID, mensaje o contexto con un nombre parecido.
Tratamiento recomendado
Respeta el lifecycle del contexto y las reglas de JIT/referencias contextuales. Obtén los servicios dentro de un contexto válido y vuelve a adquirir referencias obsoletas en lugar de reutilizarlas fuera de su activación.
Cómo distinguirlo de resultados cercanos
CONTEXT_E_ABORTINGno es equivalente; su descripción es «Se realizó una llamada a un método de un componente COM+ cuya transacción ya se anuló o está en proceso de anulación.».CONTEXT_E_NOTRANSACTIONsirve como contraste porque significa «La operación solicitada requiere que el contexto actual tenga una transacción, pero no la tiene.».
Cierra el diagnóstico repitiendo la acción desde un estado conocido y comprobando que «Se realizó una llamada a un método de un componente COM+ cuya transacción ya se confirmó o anuló.» deja de ser cierto; cualquier código distinto merece su propio análisis.
Referencias técnicas
¿Buscas un código diferente? Buscar otro código de estado o error.