CORRECTIF : Perte des objets CallContext lors de la création d'un nouveau composant de service

Ancien nº de publication de cet article : F319177
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Si vous créez une instance d'un composant de service dans une application cliente après avoir configuré des objets CallContext, vous pouvez perdre ces derniers lorsque vous créez l'instance qui leur est associée.
Cause
Ce problème se produit si les objets que vous placez dans le CallContext sont dérivés de l'interface ILogicalThreadAffinative. Si vous placez ces objets dans le CallContext (à l'aide de la méthode CallContext.SetData) et que vous créez une instance d'objet ServicedComponent, la méthode CallContext.GetData associée à ces objets renvoie une valeur nulle.
Résolution
Pour résoudre ce problème, procurez-vous le dernier Service Pack de Microsoft .NET Framework. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
318836 INFO : Procédure pour obtenir le dernier Service Pack de .NET Framework

SOLUTION DE CONTOURNEMENT

Pour contourner ce problème, utilisez l'une des méthodes suivantes :
  • Si vous avez uniquement besoin d'utiliser les éléments CallContext localement dans votre application, ne les dérivez de l'interface ILogicalThreadAffinative.

    REMARQUE : Le système d'accès distant ne transfère pas ces objets à travers AppDomains.
  • Si vous souhaitez utiliser des serveurs d'accès distant avec des objets ServicedComponent et diriger le flux CallContext vers eux, vous devez créer une instance de vos objets ServicedComponent avant de placer ces éléments dans le CallContext.

    Si cela n'est pas possible, vous pouvez stocker le contenu du CallContext avant de créer une instance de vos objets ServicedComponent puis charger à nouveau ce contenu.
REMARQUE : Vous ne pouvez pas bénéficier de la fonction CallContext dans les applications ServicedComponent. Microsoft ne prend pas en charge l'utilisation de CallContext à partir des objets ServicedComponent.
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section "Liste des produits concernés par cet article". Ce problème a été corrigé dans le Service Pack 2 (SP2) de Microsoft .NET Framework.
Plus d'informations
Grâce à l'objet CallContext vous pouvez envoyer des informations du serveur vers le client et vice versa, à travers le canal. CallContext fournit un jeu de propriétés qui emprunte le chemin de code d'exécution (chaîne d'appels).

Ce problème se produit également avec tous les en-têtes contenus dans l'objet CallContext.

Étapes pour reproduire le problème

  1. Définissez des instances d'une classe à placer dans le CallContext :
    [Serializable]public class CtxObject : ILogicalThreadAffinative{	public string CtxString;	public CtxObject(){CtxString = "Some String" ;}}
  2. Placez un de ces objets dans un emplacement de données CallContext, puis créez une instance d'un ServicedComponent :
    // Crée un objet CallContext.CtxObject CtxObj = new CtxObject () ;                     // Place l'objet dans le CallContext.CallContext.SetData ("CtxObject", CtxObj) ;// Crée un composant de service.MyServicedComponent MyObj = new MyServicedComponent () ;  // Récupère l'objet CallContext (retourne une valeur nulle).CtxObject CtxObj1 = (CtxObject) CallContext.GetData ("CtxObject") ;  
instantiate
Propriétés

ID d'article : 319177 - Dernière mise à jour : 01/17/2015 16:36:55 - Révision : 3.0

  • Microsoft .NET Framework Class Libraries 1.1
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Service Pack 2
  • kbnosurvey kbarchive kbbug kbfix kbremoting kbnetframe100sp2fix KB319177
Commentaires