Simptomi
Nakon što instalirate srpanj 2018 .NET Framework sigurnost i kvalitete Kumulativni troškovi koji se primjenjuju na .NET Framework 4.6, 4.6.1, 4.6.2, 4,7, 4.7.1 i 4.7.2 na Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 ili Windows Server 2008 SP2 primijetite pogreške na .NET Aplikacija Framework koji zadovoljava sljedeće kriterije:
-
Aplikacija koristi instance klase System.Transaction.TransactionScope omogućen tijek transakcije prosljeđivanjem TransactionScopeAsyncFlowOption.Enabled graditelja.
-
Aplikacija čini daljinski pozivi dok jedan ti dosezi transakcija je aktivan. U tom slučaju udaljene poziv je poziv koji putuje kroz prozirni proxy prije dosegne objekt poslužitelja. Daljinski pozivi Primjeri pozivi drugim domenama aplikacije i pozive kroz kanale remoting, primjerice klijent kanale koji su definirani u prostorima naziva System.Runtime.Remoting.Channels .
-
Nakon poziv udaljene System.Transactions.Transaction.Current vraća null vrijednost umjesto vrijednosti koje je vratio prije udaljene poziv.
Zaobilazno rješenje
Da biste zaobišli taj problem, pokušajte bilo koju od sljedećih metoda:
-
Za svaki doseg transakcije koja omogućuje transakcije protok promijeniti aplikacije da biste bili sigurni da daljinski pozivi pojaviti bilo gdje u kodu koji se izvodi dok je aktivna opsega transakcije. Kada odredite hoće li doseg transakcije sadrži sve daljinski pozivi razmotrite sljedeće smjernice:
-
Poziv na statički metodu nikad nije udaljene poziv.
-
Poziv je poziv metodu instance na ciljnog objekta udaljene samo ako je ciljni objekt prozirnim proxy.
-
Poziv je poziv na Graditelj udaljene samo ako je osmišljenih objekt prozirnim proxy.
Napomena System.Runtime.Remoting.RemotingServices.IsTransparentProxy metoda uvijek možete koristiti da biste provjerili je li objekt prozirnim proxy.
-
-
Onemogući transakcije protok uklanjanjem Graditelj argument TransactionScopeAsyncFlowOption.Enabled .
Upozorenje
Ovo zaobilazno rješenje je vjerojatno uzrok druge pogreške ako sve operacije "await" izvršiti dok je aktivna opsega transakcije.
-
Svojstvo Transaction.Current nije automatski serijalizirani udaljene poziv. Morate proslijeđen kao parametar. Ako poziv udaljene proći transakciju kao parametar i ne izvršite na povratni poziv klijent tijekom poziva udaljene, možete stvoriti poziv udaljene unutar novi objekt TransactionScope koji koristi TransactionScopeOptions.Suppress mogućnost. Unutar to izostavi doseg transakcije, svojstvo Transaction.Current ima vrijednost null.
Status
Možemo su svjesni taj problem i trenutno radite na razlučivost.