Objawy
Po zainstalowaniu 2018 lipca.NET Framework bezpieczeństwa i jakości pakietów zbiorczych aktualizacji dla.NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 i 4.7.2 w dodatku Service Pack 1 (SP1) dla systemu Windows 7, Windows Server 2008 R2 z dodatkiem SP1 lub Windows Server 2008 z dodatkiem SP2, można zauważyć błędy w .NET Ramy aplikacji, która spełnia następujące kryteria:
-
Aplikacja korzysta z instancji klasy System.Transaction.TransactionScope , w którym włączono przepływu transakcji przez przekazanie do konstruktora TransactionScopeAsyncFlowOption.Enabled .
-
Aplikacja sprawia, że jedno lub kilka wywołań zdalnego podczas jednego z tych zakresów transakcji jest aktywny. W takim przypadku zdalne wywołanie jest każde wywołanie, które przechodzi przez przezroczysty serwer proxy, zanim dotrze do obiektu serwera. Przykładami wywołania zdalne wywołania do innych domen aplikacji i połączeń wykonywanych za pośrednictwem kanałów komunikacji zdalnej, takich jak kanały klienta, które są zdefiniowane w przestrzeni nazw System.Runtime.Remoting.Channels .
-
Po wywołaniu zdalnym TRANSACTION.Current zwraca wartość null zamiast wartości, który został zwrócony przed zdalne wywołanie.
Obejście
Aby obejść ten problem, spróbuj wykonać jedną z następujących metod:
-
Dla każdego zakresu transakcji, który umożliwia przepływu transakcji zmienić aplikację, aby upewnić się, że nie wywołania zdalne gdziekolwiek występują w kodzie, który jest uruchamiany, gdy zakres transakcji jest aktywny. Przy określaniu czy zakres transakcji zawiera wszelkie wywołania zdalne, należy wziąć pod uwagę następujące wskazówki:
-
Wywołanie statycznej metody nigdy nie jest zdalne wywołanie.
-
Na wywołanie do metody wystąpienia na obiekcie docelowym wywołanie jest zdalny tylko wtedy, gdy obiekt docelowy jest przezroczysty serwer proxy.
-
Dla wywołania konstruktora wywołanie jest zdalny tylko wtedy, gdy obiekt konstruowanej jest przezroczysty serwer proxy.
Uwaga System.Runtime.Remoting.RemotingServices.IsTransparentProxy metoda zawsze służy do sprawdzania, czy obiekt jest przezroczysty serwer proxy.
-
-
Wyłączenie przepływu transakcji przez usunięcie argument konstruktora TransactionScopeAsyncFlowOption.Enabled .
Ostrzeżenie
Ta metoda obejścia problemu jest może spowodować inne błędy, jeśli wszystkie operacje "czekają na" wykonać, gdy transakcja jest aktywny.
-
Właściwość Transaction.Current nie jest automatycznie seryjny do połączenia zdalnego. Musi być przekazany jako parametr. Jeśli zdalne wywołanie nie przekazać transakcji jako parametr i nie powoduje wywołanie zwrotne do klienta podczas połączenia zdalnego, można utworzyć zdalne wywołanie wewnątrz obiektu nowego elementu TransactionScope korzystającej z TransactionScopeOptions.Suppress Opcja. Wewnątrz to Pomiń zakres transakcji, właściwość Transaction.Current ma wartość null.
Stan
Jesteśmy świadomi tego problemu i aktualnie pracuje rozdzielczość.