Des erreurs se produisent dans les applications qui combinent le flux de transactions et les appels distants suite à l’installation des correctifs cumulatifs de sécurité et de qualité de juillet 2018 pour .NET Framework

Symptômes

Après avoir installé les correctifs cumulatifs de sécurité et de qualité de juillet 2018 A pour .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 et 4.7.2 sous Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 ou Windows Server 2008 SP2, vous constatez des erreurs dans une application .NET Framework qui répond aux critères suivants :

  • L’application utilise des instances de la classe System.Transaction.TransactionScope dans laquelle le flux de transactions est activé en transmettant TransactionScopeAsyncFlowOption.Enabled au constructeur.

  • L’application effectue un ou plusieurs appels distants pendant que l’une de ces étendues de transaction est active. Dans ce cas, un appel distant est un appel qui transite par un proxy transparent avant d’atteindre l’objet serveur. Les appels vers d’autres domaines d’application et les appels effectués par le biais de canaux d’accès distant, comme les canaux clients définis dans les espaces de noms System.Runtime.Remoting.Channels, constituent des exemples d’appels distants.

  • Après l’appel distant, System.Transactions.Transaction.Current renvoie une valeur NULL au lieu de la valeur renvoyée avant l’appel distant.

Solution de contournement

Pour contourner ce problème, essayez l’une des méthodes suivantes :

  • Pour chaque étendue de transaction qui permet le flux de transactions, modifiez l’application pour vous assurer qu’aucun appel distant ne se produit dans le cadre exécuté pendant que l’étendue de transaction est active. Lorsque vous déterminez si une étendue de transaction contient des appels distants, tenez compte des points suivants :

    • Un appel d’une méthode statique n’est jamais un appel distant.

    • Dans le cas d’un appel d’une méthode d’instance sur un objet cible, l’appel n’est distant que si l’objet cible est un proxy transparent.

    • Dans le cas d’un appel d’un constructeur, l’appel n’est distant que si l’objet construit est un proxy transparent.

    Remarque Dans tous les cas, vous pouvez utiliser la méthode System.Runtime.Remoting.RemotingServices.IsTransparentProxy pour vérifier si un objet est un proxy transparent.

  • Désactivez le flux de transactions en supprimant l’argument de constructeur TransactionScopeAsyncFlowOption.Enabled.

    Avertissement

    Cette solution de contournement est susceptible de provoquer d’autres erreurs en cas d’exécution d’opérations « await » pendant que l’étendue de transaction est active.

  • La propriété Transaction.Current n’est pas automatiquement sérialisée vers l’appel distant. Elle doit être transmise en tant que paramètre. Si l’appel distant ne transmet pas la transaction en tant que paramètre et n’effectue pas de rappel vers le client pendant l’appel distant, vous pouvez créer l’appel distant dans un nouvel objet TransactionScope qui utilise l’option TransactionScopeOptions.Suppress. Dans cette étude de transaction « suppress », la propriété Transaction.Current a la valeur NULL.

Statut

Nous avons connaissance de ce problème et essayons de trouver une solution.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×