CORRECÇÃO: System.InvalidOperationException se utilizar XslTransform no cenário multithreaded

Traduções de Artigos Traduções de Artigos
Artigo: 320011 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Se partilhar objecto XslTransform do espaço de nomes System.Xml.xsl entre vários threads, poderá receber a seguinte mensagem de erro ao criar a aplicação:
System.InvalidOperationException: Colecção foi modificada; a operação de enumeração não pode ser executado.
A pilha de chamadas pode aparecer da seguinte forma:
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)
				
só tem sido observado este problema ocorra em computadores que tenham mais do que um processador, embora seja possível que este problema também poderá ocorrer num computador de processador único.

Causa

Este problema ocorre devido a um erro na assemblagem System.Xml.dll.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft .NET Framework. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
318836INFO: How to Obtain the Latest .NET Framework Service Pack
Nota : aplicar esta correcção a sistemas que já tenham o Microsoft .NET Framework com o Service Pack 1 instalado.

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date          Version        Size              File name
   -------------------------------------------------------------
   03-APR-2002   1.0.3705.223   1,294,336 bytes   System.Xml.dll	
				

SOLUÇÃO

Para contornar este problema, utilize a instrução de bloqueio (Microsoft Visual C# .NET) ou a construção de SyncLock... End SyncLock (em Microsoft Visual Basic. NET) para proteger a utilização do método de transformação . No entanto, esta solução alternativa pode incorrer numa penalização de desempenho inaceitáveis, consoante a estrutura e a finalidade da aplicação.

Outra solução que pode oferecer um melhor desempenho consiste em criar uma solução que implementa um conjunto ou uma cache de N + 1 XslTransform objectos, onde N é o número de processadores no computador.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no Microsoft .NET Framework Service Pack 2 (SP2).

Propriedades

Artigo: 320011 - Última revisão: 3 de fevereiro de 2014 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix KB320011 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 320011

Submeter comentários

 

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