Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

徵狀

在 Windows 7 Service Pack 1 (SP1)、Windows Server 2008 R2 SP1 或 Windows Server 2008 SP2 上安裝適用於 .NET Framework 4.6、4.6.1、4.6.2、4.7、4.7.1 和 4.7.2 的 2018 年 7 月 .NET Framework 安全性和品質彙總套件之後,您在符合下列條件的 .NET Framework 應用程式中發現錯誤:

  • 應用程式使用 System.Transaction.TransactionScope 類別的執行個體,其中的交易流程是透過傳遞 TransactionScopeAsyncFlowOption.Enabled 至建構函式的方式啟用。

  • 當其中一個交易範圍為作用中時,應用程式發出一個或多個遠端呼叫。 在這個情況中,遠端呼叫是指抵達伺服器物件前周遊於 Transparent Proxy 的任何呼叫。 遠端呼叫的範例包括對其他應用程式網域的呼叫,以及透過遠端通道 (例如 System.Runtime.Remoting.Channels 命名空間中定義的用戶端通道) 發出的呼叫。

  • 在遠端呼叫之後,System.Transactions.Transaction.Current 傳回 null 值,而非遠端呼叫之前傳回的值。

因應措施

若要暫時略過這個問題,請嘗試下列任何方法:

  • 對於每個啟用交易流程的交易範圍,請變更應用程式,以確保交易範圍為作用中時,所執行的程式碼中不會發出任何遠端呼叫。 當您判斷交易範圍是否包含任何遠端呼叫時,請考量下列方針:

    • 對靜態方法的呼叫絕不是遠端呼叫。

    • 若是對目標物件上執行個體方法的呼叫,只有當目標物件是 Transparent Proxy 時,才是遠端呼叫。

    • 若是對建構函式的呼叫,只有當建構物件是 Transparent Proxy 時,才是遠端呼叫。

    注意:您永遠可以使用 System.Runtime.Remoting.RemotingServices.IsTransparentProxy 方法來確認物件是否為 Transparent Proxy。

  • 移除 TransactionScopeAsyncFlowOption.Enabled 建構函式引數,以停用交易流程。

    警告

    如果任何 "await" 作業在交易範圍為作用中時執行,此因應措施可能會造成其他錯誤。

  • Transaction.Current 屬性不會自動序列化為遠端呼叫, 而是必須以參數形式傳遞。 如果遠端呼叫未以參數形式傳遞交易,並且未在遠端呼叫期間對用戶端發出回呼,您可以在使用 TransactionScopeOptions.Suppress 選項的新 TransactionScope 物件內建立遠端呼叫。 在這個隱藏交易範圍內,Transaction.Current 屬性具有 null 值。

狀態

我們已知這個問題,目前正在研究解決方案。

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×