Проблема
После установки июля 2018 безопасности платформа.NET Framework и качество накопительные пакеты обновления, относящиеся к платформа.NET Framework 4.6 4.6.1, 4.6.2, 4.7, 4.7.1 и 4.7.2 в Пакет обновления 1 (SP1) для Windows 7, Windows Server 2008 R2 с пакетом обновления 1 или Windows Server 2008 SP2 можно заметить ошибки в .NET Приложение Framework, отвечающий следующим условиям:
-
Приложение использует экземпляры класса System.Transaction.TransactionScope , в котором поток транзакций включается, передав конструктору TransactionScopeAsyncFlowOption.Enabled .
-
Приложение делает один или несколько удаленных вызовов во время одной из этих областей транзакция активна. В этом случае удаленный вызов является любой вызов, который передается через прозрачный прокси достигает объект сервера. Удаленные вызовы примеры вызовов на другие домены приложения и вызовы через каналы удаленного взаимодействия, например, клиентских каналов, которые определены в пространстве имен System.Runtime.Remoting.Channels .
-
После удаленного вызова возвращает нулевое значение вместо значения, который был возвращен перед удаленным вызовом System.Transactions.Transaction.Current.
Обходной путь
Чтобы обойти эту проблему, выполните одно из следующих методов:
-
Для каждой области транзакции, включает поток транзакций измените приложение, чтобы убедиться в том, что нет удаленных вызовов случиться в любом месте в коде, который выполняется при активном области транзакции. При определении области транзакций содержит ли все удаленные вызовы, Рассмотрите следующие рекомендации:
-
Вызов статического метода не удаленного вызова.
-
Для вызова метода экземпляра для целевого объекта вызов удаленной только в том случае, если целевой объект является прозрачный прокси.
-
Для вызова конструктора вызов является удаленным, только если созданный объект прозрачный прокси.
Примечание.Всегда можно использовать метод System.Runtime.Remoting.RemotingServices.IsTransparentProxy для проверки, является ли объект прозрачным прокси.
-
-
Отключите поток транзакций, удалив аргумента конструктора TransactionScopeAsyncFlowOption.Enabled .
Предупреждение.
Этот метод может вызвать другие ошибки, если какие-либо операции «ожидания» выполнять во время активной области транзакции.
-
Свойство Transaction.Current не сериализуется автоматически для удаленного вызова. Он должен быть передан как параметр. Если удаленный вызов транзакции не передавать как параметр и не выполняет обратный вызов клиента во время удаленного вызова, можно создать удаленный вызов внутри объекта TransactionScope , использующий TransactionScopeOptions.Suppress параметр. Внутри это отключить область транзакции, свойство Transaction.Current имеет значение null.
Статус
Мы осведомлены об этой проблеме и в настоящее время занимается разрешением.