Chyby v aplikacích, které kombinují tok transakcí a Vzdálená volání po červenci 2018 zabezpečení rozhraní.NET Framework a kvality kumulativní instalaci

Příznaky

Po instalaci července 2018 zabezpečení rozhraní.NET Framework a kumulativní kvality, které se vztahují k rozhraní.NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 a 4.7.2 v systému Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 nebo Windows Server 2008 SP2 oznámení chyb v .NET Aplikační Framework, který splňuje následující kritéria:

  • Aplikace používá instance System.Transaction.TransactionScope třída, ve kterém je povolen tok transakcí předáním konstruktoru TransactionScopeAsyncFlowOption.Enabled .

  • Aplikace volá jednu nebo více vzdálených při jedné z těchto oborů transakce je aktivní. V tomto případě vzdálené volání je každé volání, které prochází transparentní server proxy dříve, než dosáhne objekt serveru. Příkladem Vzdálená volání jsou volání do jiných domén aplikace a prostřednictvím kanály vzdálené komunikace, například klienta kanály, které jsou definovány v oboru názvů System.Runtime.Remoting.Channels .

  • Po vzdáleného volání System.Transactions.Transaction.Current vrátí hodnotu null namísto hodnoty, která byla vrácena před vzdáleného volání.

Řešení

Chcete-li vyřešit tento problém, zkuste některou z následujících metod:

  • Pro každý obor transakce, která umožňuje tok transakcí změňte aplikaci a ujistěte se, že žádná Vzdálená volání vyskytnout kdekoli v kódu, který běží, zatímco obor transakce je aktivní. Pokud zjistíte, zda obor transakce obsahuje vzdálené volání, zvažte následující pokyny:

    • Volání statické metody není nikdy vzdáleného volání.

    • Pro volání metody instance cílového objektu volání je vzdálený pouze v případě, že cílový objekt je transparentní server proxy.

    • Volání konstruktoru je vzdálené pouze v případě, že transparentní server proxy je konstruovaný objekt volání.

    Poznámka:Vždy můžete použít metodu System.Runtime.Remoting.RemotingServices.IsTransparentProxy Chcete-li zkontrolovat, zda je objekt transparentní server proxy.

  • Odstraníte-li argument konstruktoru TransactionScopeAsyncFlowOption.Enabled zakážete tok transakcí. 

    Upozornění

    Toto řešení se může způsobit jiné chyby, pokud všechny operace "očekávat" spustit, zatímco obor transakce je aktivní.

  • Transaction.Current vlastnost není automaticky serializovat do vzdáleného volání. Musí být předán jako parametr. Pokud transakce nelze předat jako parametr a neprovede zpětné volání klienta během vzdáleného volání vzdáleného volání můžete vytvořit vzdáleného volání uvnitř nového TransactionScope objekt, který používá TransactionScopeOptions.Suppress možnost. Uvnitř to potlačit rozsahu transakce, Transaction.Current vlastnost má hodnotu null.

Stav

Jsme si vědomi tohoto problému a aktuálně pracuje na řešení tohoto problému.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

Děkujeme vám za váš názor! Pravděpodobně bude užitečné, když vás spojíme s některým z našich agentů podpory Office.

×