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

Traduções deste artigo Traduções deste artigo
ID do artigo: 320011 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Se você compartilhar um objeto XslTransform do espaço para nome System.XML.xsl entre vários threads, você receberá a seguinte mensagem de erro quando você cria seu aplicativo:
System.InvalidOperationException: Coleção foi modificada; talvez a operação enumeração não seja executada.
A pilha de chamadas pode aparecer da seguinte maneira:
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)
				
esse problema já foi visto somente para ocorrer em computadores que tenham mais de um processador, embora seja possível que esse problema também pode ocorrer em um computador único processador.

Causa

Esse problema ocorre devido a um erro no assembly System.XML.dll.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft .NET Framework. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
318836INFO: Como obter o Service Pack mais recente do .NET Framework
Observação : aplicar essa correção aos sistemas que já possuem o Microsoft .NET Framework com Service Pack 1 instalado.

A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Date          Version        Size              File name
   -------------------------------------------------------------
   03-APR-2002   1.0.3705.223   1,294,336 bytes   System.Xml.dll	
				

SOLUÇÃO ALTERNATIVA

Para contornar esse problema, use a instrução lock (no Microsoft Visual translation from VPE for Csharp. NET) ou a construção SyncLock... End SyncLock (no Microsoft Visual Basic. NET) para proteger o uso do método Transform . No entanto, essa solução alternativa pode incorrer em uma penalidade de desempenho inaceitável, dependendo do design e a finalidade do seu aplicativo.

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

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft .NET Framework Service Pack 2 (SP2).

Propriedades

ID do artigo: 320011 - Última revisão: quinta-feira, 24 de outubro de 2013 - 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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