CORRIGER : System.InvalidOperationException si vous utilisez XslTransform dans le scénario multithread

Traductions disponibles Traductions disponibles
Numéro d'article: 320011 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Symptômes

Si vous partagez un objet XslTransform du nom System.Xml.Xsl entre plusieurs threads, vous pouvez recevoir le message d'erreur suivant lorsque vous générez votre application :
System.InvalidOperationException : collection a été modifiée; opération d'énumération ne peut pas s'exécuter.
La pile des appels peut s'afficher comme suit
at System.Collections.ArrayListEnumeratorSimple.MoveNext()
    at System.Xml.XPath.XsltFunction.SetXsltContext(XsltContext context)
    at System.Xml.XPath.CompiledXpathExpr.SetContext(XmlNamespaceManager nsManager)
    at System.Xml.Xsl.Processor.GetValueQuery(Int32 key)
    at System.Xml.Xsl.Processor.ValueOf(ActionFrame context, Int32 key)
    at System.Xml.Xsl.ValueOfAction.Execute(Processor processor, ActionFrame frame)
    at System.Xml.Xsl.ActionFrame.Execute(Processor processor)
    at System.Xml.Xsl.Processor.Execute()
    at System.Xml.Xsl.XslTransform.Transform(IXPathNavigable input,XsltArgumentList args, TextWriter output)
				
Qu'été a vu ce problème produire se sur les ordinateurs qui ont plus de un processeur bien qu'il soit possible que ce problème peut également survenir sur un ordinateur au processeur unique.

Cause

Ce problème se produit à cause d'un bogue dans l'assembly System.Xml.dll

Résolution

Pour résoudre ce problème procurez-vous le dernier Service Pack 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 : Obtention du dernier Service Pack .NET FRAMEWORK
REMARQUE : applique ce correctif aux systèmes qui ont déjà Microsoft .NET Framework avec Service Pack 1 installé.

La version anglaise de ce correctif doit avoir les attributs de fichier suivants ou ceux d'une version ultérieure
   Date          Version        Size              File name
   -------------------------------------------------------------
   03-APR-2002   1.0.3705.223   1,294,336 bytes   System.Xml.dll	
				

SOLUTION DE CONTOURNEMENT

Pour contourner ce problème, utilisez l'instruction lock (dans Microsoft Visual C# .NET) ou la construction SyncLock ... End SyncLock (dans Microsoft Visual Basic .NET) pour protéger l'utilisation de la méthode Transform. Toutefois cette solution peut entraîner une baisse de performance inacceptable en fonction de la conception ou de la finalité de votre application

Une autre solution qui peut offrir la performance meilleure existe de créer une solution qui met en ?uvre d'un pool ou un cache de N +1 objets XslTransform dont N est le numéro de processeurs sur l'ordinateur.

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés au début de cet article Ce problème a été corrigé pour la première fois dans le Service Pack 2 Microsoft .NET Framework

Propriétés

Numéro d'article: 320011 - Dernière mise à jour: lundi 3 février 2014 - Version: 3.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Mots-clés : 
kbnosurvey kbarchive kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix KB320011 KbMtfr kbmt
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que feraient une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique. Si vous relevez des erreurs graves et souhaitez contribuer à l?amélioration du système, vous pouvez compléter l?enquête à votre disposition dans le bas des articles.
La version anglaise de cet article est la suivante: 320011
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