REVISIÓN: Los objetos CallContext se pierden al crear un nuevo componente con servicios

Seleccione idioma Seleccione idioma
Id. de artículo: 319177 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E319177
Expandir todo | Contraer todo

En esta página

Síntomas

Si establece objetos CallContext antes de crear una instancia de un componente con servicios en una aplicación cliente, es posible que pierda los objetos CallContext una vez creada la instancia de objetos.

Causa

Este problema tiene lugar si los objetos colocados en CallContext proceden de la interfaz ILogicalThreadAffinative. Si coloca estos objetos en CallContext (mediante el método CallContext.SetData) y, a continuación, crea una instancia de un objeto ServicedComponent, el método CallContext.GetData para estos objetos devuelve un valor nulo.

Solución

Para resolver este problema, consiga la última versión del Service Pack para Microsoft .NET Framework. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
318836 INFO: Cómo obtener el Service Pack más reciente de .NET Framework

EVITAR EL PROBLEMA

Para evitar este problema, utilice uno de los métodos siguientes:
  • Si sólo tiene que utilizar elementos CallContext localmente en su aplicación, no derive estos elementos de ILogicalThreadAffinative.

    NOTA: el sistema remoto no pasa estos objetos a través de AppDomains.
  • Si desea utilizar servidores remotos con objetos ServicedComponent y si desea que CallContext fluya hasta ellos, debe crear una instancia de los objetos ServicedComponent antes de colocarlos en CallContext.

    Si no puede controlar esto, puede almacenar el contenido de CallContext antes de crear una instancia de ServicedComponent y, a continuación, volver a cargar el contenido.
NOTA: no puede aprovechar la característica CallContext en aplicaciones ServicedComponent. Microsoft no admite el uso de CallContext desde dentro de objetos ServicedComponent.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información en este artículo se refiere a:" de este artículo. Este problema se corrigió primero en el Service Pack 2 de Microsoft .NET Framework.

Más información

Con el objeto CallContext puede enviar información junto con el canal del cliente al servidor o viceversa. CallContext proporciona un conjunto de propiedades que acompañan a la ruta de código de ejecución (cadena de llamadas).

Este problema también se da con todos los encabezados del objeto CallContext.

Pasos para reproducir el problema

  1. Defina las instancias de una clase que se colocará en CallContext:
    [Serializable]
    public class CtxObject : ILogicalThreadAffinative
    {
    	public string CtxString;
    	public CtxObject(){CtxString = "Some String" ;}
    }
  2. Coloque uno de estos objetos en una ranura de datos CallContext y, a continuación, cree una instancia de un ServicedComponent:
    // Create CallContext object.
    CtxObject CtxObj = new CtxObject () ; 
    
    // Set it in the CallContext.
    CallContext.SetData ("CtxObject", CtxObj) ;
    
    // Create the serviced component.
    MyServicedComponent MyObj = new MyServicedComponent () ; 
    
    // Retrieve the CallContext object (returns null).
    CtxObject CtxObj1 = (CtxObject) CallContext.GetData ("CtxObject") ; 

Propiedades

Id. de artículo: 319177 - Última revisión: martes, 16 de marzo de 2004 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft .NET Framework Class Libraries 1.1
  • Microsoft Visual Studio .NET 2002 Professional
  • Microsoft .NET Framework Service Pack 2
Palabras clave: 
kbbug kbfix kbremoting kbnetframe100sp2fix KB319177

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com