Update: System.InvalidOperationException tritt auf, wenn XslTransform in einem Multithreaded Szenario verwendet wird

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 320011 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D320011
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
320011 FIX: System.InvalidOperationException If You Use XslTransform in Multithreaded Scenario
Alles erweitern | Alles schließen

Problembeschreibung

Wenn verschiedene Threads ein XslTransform-Objekt aus dem Namespace System.Xml.Xsl gemeinsam nutzen, wird möglicherweise folgende Fehlermeldung angezeigt, wenn Sie Ihre Anwendung erstellen:
System.InvalidOperationException: Die Auflistung wurde geändert; der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden.
Die Aufrufliste könnte wie folgt aussehen:
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)
Dieses Problem ist bislang nur bei Computern mit mehreren Prozessoren aufgetreten; es kann jedoch nicht ausgeschlossen werden, dass dieses Problem bei einem Computer mit nur einem Prozessor ebenfalls auftreten könnte.

Ursache

Dieses Problem tritt aufgrund eines Fehlers in der Assembly System.Xml.dll auf.

Lösung

Installieren Sie das aktuellste Service Pack für Microsoft .NET Framework, um dieses Problem zu beheben. Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base:
318836 INFO: How to Obtain the Latest .NET Framework Service Pack
Hinweis: Wenden Sie dieses Update auf Systemen an, auf denen bereits Microsoft .NET Framework inklusive des Service Pack 1 installiert ist.

Abhilfe

Sie können dieses Problem lösen, indem Sie entweder die Anweisung lock (in Microsoft Visual C# .NET) oder das Konstrukt SyncLock...End SyncLock (in Microsoft Visual Basic .NET) verwenden, um die Nutzung der Methode Transform zu schützen. Diese Abhilfe kann jedoch (je Gestaltung und Verwendungszweck Ihrer Anwendung) möglicherweise zu einem inakzeptablen Leistungsverlust führen.

Eine weitere Möglichkeit, die einen Leistungsverlust verhindern könnte, besteht darin, eine Lösung zu erstellen, die einen Pool von N +1 XslTransform-Objekten zwischenspeichert (dabei steht N für die Anzahl der Prozessoren Ihres Computers).

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Microsoft .NET Framework Service Pack 2 (SP2) behoben.

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 320011 - Geändert am: Dienstag, 4. Februar 2014 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0
Keywords: 
kbnosurvey kbarchive kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix kbnokeyword KB320011
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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