นำไปใช้กับ
.NET Framework 4.7.2 .NET Framework 4.7.1 .NET Framework 4.7 .NET Framework 4.6 .NET Framework 4.6.1 .NET Framework 4.6.2

อาการ

หลังจากที่คุณติดตั้งแบบ 2018 กรกฎาคม.NET Framework ปลอดภัยและเปลี่นคุณภาพที่นำไปใช้กับ.NET Framework 4.6, 4.6.1 การ 4.6.2 การ 4.7, 4.7.1 และ 4.7.2 บน Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1 หรือ Windows Server 2008 SP2 คุณสังเกตเห็นข้อผิดพลาดในการ.NET โปรแกรมประยุกต์กรอบงานที่ตรงกับเกณฑ์ต่อไปนี้:

  • แอพลิเคชันใช้อินสแตนซ์ของคลาSystem.Transaction.TransactionScopeที่ธุรกรรมขั้นตอนการเปิดใช้งาน โดยการส่งผ่านTransactionScopeAsyncFlowOption.Enabledไปยังตัวสร้างปลั๊กอิน

  • แอพลิเคชันทำให้การเรียกระยะไกลอย่าง น้อยหนึ่งในขณะที่ค่าใดค่าหนึ่งในขอบข่ายธุรกรรมเหล่านี้จะเปิดใช้งาน ในกรณีนี้ การเรียกระยะไกลคือการ โทรใด ๆ ที่ส่งผ่านทางพร็อกซีโปร่งใสก่อนที่จะถึงวัตถุเซิร์ฟเวอร์ ตัวอย่างของการเรียกระยะไกลรวมเรียกโดเมนโปรแกรมประยุกต์อื่นและการเรียกผ่านช่องทางระยะไกล เช่นไคลเอนต์สถานีที่กำหนดไว้ใน namespaces System.Runtime.Remoting.Channels

  • หลังจากการเรียกระยะไกลSystem.Transactions.Transaction.Currentส่งกลับค่า null แทนที่เป็นค่าที่ส่งคืนมาก่อนที่จะเรียกเลขหมายระยะไกล

การแก้ปัญหา

เมื่อต้องการหลีกเลี่ยงปัญหานี้ ลองทำตามวิธีการต่อไปนี้:

  • สำหรับขอบเขตแต่ละธุรกรรมที่เปิดใช้งานธุรกรรมกระแสอยู่ เปลี่ยนแปลงแอพลิเคชันเพื่อให้แน่ใจว่า มีการเรียกระยะไกลเกิดขึ้นที่ใดก็ได้ในโค้ดที่ทำงานในขณะที่ขอบเขตธุรกรรมที่ใช้งานอยู่ เมื่อคุณตรวจสอบว่า ขอบเขตธุรกรรมประกอบด้วยเรียกใด ๆ ระยะไกลให้พิจารณาคำแนะนำต่อไปนี้:

    • การเรียกเมธอดแบบสแตติกไม่ใช่การเรียกระยะไกล

    • สำหรับการเรียกวิธีการอินสแตนซ์บนวัตถุเป้าหมาย การเรียกไม่ไกลวัตถุเป้าหมายคือ พร็อกซีโปร่งใส

    • สำหรับการเรียกไปยังตัวสร้างปลั๊กอิน การเรียกไม่ไกลวัตถุที่สร้างเป็นพร็อกซีโปร่งใส

    หมายเหตุ คุณสามารถใช้เมธอดSystem.Runtime.Remoting.RemotingServices.IsTransparentProxyเพื่อตรวจสอบว่า วัตถุ พร็อกซีโปร่งใสเสมอกัน

  • ปิดใช้งานขั้นตอนการธุรกรรม โดยเอาอาร์กิวเมนต์คอนสตรัคเตอร์TransactionScopeAsyncFlowOption.Enabled 

    คำเตือน

    วิธีแก้ปัญหานี้มีแนวโน้มที่จะทำให้เกิดข้อผิดพลาดอื่น ๆ ดำเนินการดำเนินการใด ๆ "รอ" ในขณะที่ขอบเขตธุรกรรมที่ใช้งานอยู่

  • คุณสมบัติTransaction.Currentจะไม่โดยอัตโนมัติทำให้เป็นอนุกรมเพื่อการเรียกระยะไกล จะต้องถูกส่งผ่านเป็นพารามิเตอร์ ถ้าการเรียกระยะไกลผ่านธุรกรรมเป็นพารามิเตอร์ และทำการติดต่อกลับไปยังไคลเอนต์ในระหว่างการเรียกระยะไกล คุณสามารถสร้างการเรียกระยะไกลภายในขอบข่ายธุรกรรมวัตถุใหม่ที่ใช้TransactionScopeOptions.Suppress ตัวเลือก ซึ่งอยู่ภายในขอบข่ายธุรกรรมที่ระงับ คุณสมบัติTransaction.Currentมีค่า null

สถานะ

เราตระหนักถึงปัญหานี้ และกำลังทำงานกับวิธีแก้ไขปัญหา

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ