เนื่องจากฉันพบปัญหาในการประมวลผลธุรกรรมในบริการเว็บครั้งล่าสุด ฉันจึงค้นพบสิ่งที่น่าสนใจเกี่ยวกับการตั้งค่ารายการสตริงการเชื่อมต่อของ OracleConnection โดยไม่ตั้งใจขณะทำการดีบักโปรแกรม
ฉันเคยอ่านบทความหนึ่งแล้ว แต่ฉันจำไม่ได้ว่าบทความคืออะไร แนะนำให้ตั้งค่าเป็นเท็จ ตอนนั้นฉันไม่ได้ลงรายละเอียดว่าทำไมจึงควรตั้งค่าเป็นเท็จ โปรแกรมของฉัน enlist=false ถูกเขียนโดยตรง ตอนนี้ฉันเพิ่งค้นพบว่ามีความสัมพันธ์ที่ลึกซึ้งระหว่างการตั้งค่าการเกณฑ์ทหารและการประมวลผลธุรกรรม
โดยทั่วไปผู้จัดการธุรกรรมจะใช้สองวิธีในการจัดการ วิธีแรกเรียกว่า Lightweight Transaction Management เรียกว่า LTM และอีกวิธีเรียกว่า oleX TM ในการส่งเฟสอย่างง่าย โดยทั่วไปจะใช้ LTM ในขณะที่การประมวลผลธุรกรรมแบบกระจาย โดยทั่วไปจะใช้ 2PC ดังนั้นวิธีการที่ใช้คือ oleX TM
ถ้า enlist=false หมายความว่าธุรกรรมที่ตามมาจะไม่ถูกลงทะเบียนในธุรกรรมปัจจุบัน ดังนั้นธุรกรรมปัจจุบันจะไม่กลายเป็นรากของธุรกรรม หากใช้การประมวลผลธุรกรรมแบบกระจายในโปรแกรม อาจดำเนินการไม่ถูกต้อง (ฉันยังไม่ได้ทดสอบสิ่งนี้) ขณะนี้โปรแกรมบอกให้ TM ใช้ LTM ในการจัดการ
หาก enlist=true กระบวนการจะบอก TM ว่าจำเป็นต้องได้รับการจัดการโดยใช้ oleX TM การจัดการธุรกรรมแบบกระจายจะถูกเปิดใช้งานโดยอัตโนมัติในเวลานี้ ดังนั้นหาก enlist=true ถูกตั้งค่าในสตริงการเชื่อมต่อ หากใช้ฐานข้อมูล oracle จากนั้นพื้นหลังจะเกิดขึ้นเมื่อเรียก oramts.dll หากไม่ได้ติดตั้งบริการ MTS สำหรับ Oracle ในสภาพแวดล้อมการพัฒนาระบบจะแจ้งว่าไม่พบ oramts.dll คุณสามารถดาวน์โหลดแพ็คเกจการติดตั้งของบริการนี้ได้จากเว็บไซต์ของ Oracle ฉันไม่รู้ว่าเหตุใด Oracle จึงไม่จัดเตรียมแพ็คเกจการติดตั้งแยกต่างหาก แต่ดาวน์โหลดมาพร้อมกับ odac
จะเกิดอะไรขึ้นถ้าคุณไม่กำหนดค่าการเกณฑ์ทหาร? ขึ้นอยู่กับว่าโปรแกรมของคุณใช้ธุรกรรมแบบกระจายหรือการประมวลผลธุรกรรมทั่วไป TM จะตอบสนองโดยอัตโนมัติตามคำขอของโปรแกรม
สรุป: enlist สามารถควบคุมการลงทะเบียนธุรกรรมได้ หากคำอธิบายของฉันผิด โปรดช่วยแก้ไขฉันด้วย
ที่อยู่ลิงก์: http://yanrongpi.cnblogs.com/archive/2006/07/13/450189.html