Príznaky
Po nainštalovaní júla 2018 .NET Framework zabezpečenia a kumulatívne kvality, určené pre rozhranie .NET Framework 4.6, 4.6.1 4.6.2, 4.7, 4.7.1 a 4.7.2 Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 alebo Windows Server 2008 SP2, zistíte, že chyby v .NET Rámec aplikácia, ktorá spĺňa tieto kritériá:
-
Aplikácia používa inštancie triedy System.Transaction.TransactionScope je povolený transakcie tok odovzdaním TransactionScopeAsyncFlowOption.Enabled výrobcu.
-
Aplikácia je jeden alebo viac vzdialené volania z týchto transakcií rozsahy je aktívne. V takom prípade vzdialené volanie je volanie, prenášané cez transparentný proxy, než dosiahne objekt servera. Vzdialené volania príklady iných žiadosť domén a hovory prostredníctvom vzdialeného kanálov, ako sú definované System.Runtime.Remoting.Channels názvov kanály klient.
-
Po vzdialené volanie System.Transactions.Transaction.Current vráti hodnotu namiesto hodnoty, ktorá vrátila pred vzdialené volanie.
Alternatívne riešenie
Tento problém obísť, použite nasledujúce postupy:
-
Pre každý rozsah transakcií, umožňujúce transakcie tok zmena uistite sa, že žiadne vzdialené volania vyskytnúť kdekoľvek kód, ktorý sa spustí, keď je transakcia rozsah. Keď určíte, či rozsahu transakcií obsahuje všetky vzdialené volania, zvážte nasledujúce pokyny:
-
Volanie statická metóda je nikdy vzdialené volanie.
-
Výzvy postup inštanciu objektu cieľ, volanie je vzdialený len v prípade, že cieľový objekt je priehľadný.
-
Výzvy na výrobcu, je volanie vzdialenej len v prípade, že postavený objekt je priehľadný.
Poznámka: System.Runtime.Remoting.RemotingServices.IsTransparentProxy metódu môžete použiť vždy skontrolujte, či objekt je priehľadný.
-
-
Vypnutie transakcie tok odstránením TransactionScopeAsyncFlowOption.Enabled constructor argument.
Upozornenie:
Tento postup sa môže spôsobiť iné chyby, ak žiadne "čakajú" operácie vykonať transakcia rozsah je aktívne.
-
Vlastnosť Transaction.Current nie je automaticky serializovať na vzdialené volanie. Musia byť odovzdané ako parameter. Ak vzdialené volanie nevyhovuje transakcie ako parameter a neznamená spätné volanie klienta vzdialenej hovoru môžete vytvoriť vzdialené volanie do nového TransactionScope objekt, ktorý používa TransactionScopeOptions.Suppress možnosť. V tomto potlačiť rozsah transakcií, vlastnosť Transaction.Current má hodnotu null.
Stav
Sme o tomto probléme vie a v súčasnosti pracuje na rozlíšenie.