Ocorrem erros nas aplicações que combinam o fluxo de transacções e chamadas remotas após o de 2018 de Julho de segurança do .NET Framework e os conjuntos de qualidade estão instalados

Sintomas

Depois de instalar o de 2018 de Julho de segurança do .NET Framework e os conjuntos de qualidade que se aplicam ao .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 e 4.7.2 no Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 ou Windows Server 2008 SP2, detectar erros num .NET Aplicação de Framework que satisfaz os seguintes critérios:

  • A aplicação utiliza as instâncias da classe System.Transaction.TransactionScope nas quais o fluxo de transacções está activado, passando de TransactionScopeAsyncFlowOption.Enabled para o construtor.

  • A aplicação efectua uma ou mais chamadas remotas enquanto um dos âmbitos transacção estiver activo. Neste caso, uma chamada remota é qualquer chamada transmitidos através de um proxy transparente antes de atingir o objecto de servidor. Exemplos de chamadas remotas são chamadas para outros domínios de aplicação e chamadas efectuadas através de canais do .NET remoting, por exemplo, os canais de cliente que são definidos em espaços de nomes System.Runtime.Remoting.Channels .

  • Depois da chamada remota, System.Transactions.Transaction.Current devolve um valor nulo em vez do valor que foi devolvido antes da chamada remota.

Solução

Para contornar este problema, tente qualquer dos seguintes métodos:

  • Para cada âmbito de transacção que permite o fluxo de transacções, altere a aplicação para se certificar de que não existem chamadas remotas ocorrem em qualquer parte no código que é executado enquanto o âmbito da transacção está activo. Quando determinar se um âmbito de transacção contém quaisquer chamadas remotas, considere as seguintes directrizes:

    • Uma chamada para um método estático nunca é numa chamada remota.

    • Para uma chamada para um método de instância de um objecto de destino, a chamada é remota apenas se o objecto de destino é um proxy transparente.

    • Para uma chamada para um construtor, a chamada é remota apenas se o objecto calculado é um proxy transparente.

    NotaPode sempre utilizar o método System.Runtime.Remoting.RemotingServices.IsTransparentProxy para verificar se um objecto é um proxy transparente.

  • Desactive o fluxo de transacções, removendo o argumento do construtor de TransactionScopeAsyncFlowOption.Enabled

    Aviso

    Esta solução alternativa é susceptível de provocar outros erros se quaisquer operações "aguardar" executar enquanto estiver activo o âmbito da transacção.

  • A propriedade Current não é serializada automaticamente para a chamada remota. Tem de ser transmitido como um parâmetro. Se a chamada remota não passa a transacção como um parâmetro e não efectua uma chamada de retorno para o cliente durante a chamada remota, pode criar a chamada remota dentro de um novo objecto de TransactionScope que utiliza o TransactionScopeOptions.Suppress opção. Dentro de isto suprimir o âmbito de transacção, a propriedade Current tem um valor nulo.

Estado

Vamos são conhecimento deste problema e está a trabalhar actualmente uma resolução.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×