REVISIÓN: System.InvalidOperationException si utiliza XslTransform en una situación de subprocesos múltiples

Seleccione idioma Seleccione idioma
Id. de artículo: 320011 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E320011
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Si comparte un objeto XslTransform del espacio de nombres System.Xml.Xsl entre varios subprocesos, puede aparecer un mensaje de error similar al siguiente al generar la aplicación:
System.InvalidOperationException: colección modificada; puede que no se ejecute la operación de enumeración.
La pila de llamadas puede ser como la siguiente:
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)
				
Este problema se ha visto que ocurre únicamente en equipos que tienen más de un procesador, aunque es posible que también pueda darse en equipos que sólo tengan uno.

Causa

Este problema se debe a un error en el ensamblado de System.Xml.dll.

Solución

Para resolver este problema, consiga la versión más reciente del Service Pack para Microsoft .NET Framework. Para obtener información adicional al respecto, 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
NOTA: aplique esta revisión en los sistemas que ya tengan Microsoft .NET Framework con el Service Pack 1.

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes u otros posteriores:
Contraer esta tablaAmpliar esta tabla
FechaVersiónTamañoNombre de archivo
03-ABR-20021.0.3705.2231.294.336 bytesSystem.Xml.dll

SOLUCIÓN ALTERNATIVA

Para evitar este problema, use la instrucción lock (en Microsoft Visual C# .NET) o el constructor SyncLock...End SyncLock (en Microsoft Visual Basic .NET) para proteger el uso del método Transform. Sin embargo, esta solución alternativa puede incurrir en una disminución del rendimiento inaceptable, según el diseño y el fin de la aplicación.

Otra solución alternativa que puede ofrecer un mejor resultado es crear una solución que implemente un grupo o una caché de N+1 objetos XslTransform, N es el número de procesadores del equipo.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este problema se corrigió primero en Microsoft .NET Framework Service Pack 2 (SP2).

Propiedades

Id. de artículo: 320011 - Última revisión: martes, 28 de enero de 2014 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft .NET Framework Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Palabras clave: 
kbnosurvey kbarchive kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix KB320011

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