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

Traductions disponibles Traductions disponibles
Numéro d'article: 319177 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F319177
Agrandir tout | Réduire tout

Sommaire

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") ;  

Propriétés

Numéro d'article: 319177 - Dernière mise à jour: mardi 24 février 2004 - Version: 3.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework Class Libraries 1.1
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Service Pack 2
Mots-clés : 
kbbug kbfix kbremoting kbnetframe100sp2fix KB319177
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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