คุณสมบัติ Transaction ที่ใช้ใน Web Service มีอยู่ 5 คุณสมบัติ คือ
- Disabled: หากมีการเรียกใช้งานจะไม่ใช้ transaction
- NotSupported: หากมีการเรียกใช้งานจะไม่รองรับ transaction
- Required: หากมี transaction หลักอยู่แล้วให้ใช้ตัวเดิม แต่ถ้ายังไม่มีก็จะสร้างใหม่
- RequiresNew: หากมีการเรียกใช้งาน สร้าง transaction ใหม่เสมอ โดยไม่ต้องคำนึงถึงการทำงานอื่น
- Supported: ให้ใช้ transaction ร่วมกันโดยไม่สร้างใหม่
ADO.NET DataSet(.xsd) กับ Transaction
ส่วนใหญ่ Project ที่ผู้เขียนสร้างขึ้นในการทำงาน ถ้าเขียนบน .Net ก็มักจะใช้ในส่วนของ DataSet .xsd นั่นก็คือ DataSet ที่สร้างเพื่อทำงานกับฐานข้อมูล เมื่อเรียกใช้งานจาก Visual Studio (2008/2010) โปรแกรมก็จะสร้างหน้าจอ Design โครงสร้างของ DataSet ให้ใช้งานโดยสะดวก ซึ่งก็คือการช่วยเราสร้าง Class ที่ Inheritance มาจาก System.Data.DataSet นั่นเอง แต่ผู้เขียนจะข้ามขั้นตอนนี้ไป
การใช้งาน DataSet .xsd ไม่ยาก และยังประหยัดเวลาการเขียน SQL Statement อีกด้วย แต่ปัญหาก็คือเรื่องของการ Manage Transaction ซึ่งไม่สามารถระบุจุดที่เปิด Transaction ที่ on runtime code ของเราได้ เนื่องจากการสร้าง Object Instance ขึ้นมาใช้งานแทนตัวของ DataSet ทำให้การทำงานของ Transaction เป็นกลไกภายในของ Object
การแก้ปัญหาคือ การนำ TransactionScope มาใช้
TransactionScope
อยู่ภายใน System.Transactions เมื่อเรียกมาใช้งานจะมีรูปแบบการทำงานเป็นบล๊อก คือ จะควบคุมการใช้ Transaction ภายในบล๊อกของตัวเองเท่านั้น และจะทำการ Rollback Transaction อัตโนมัติเมื่อคำสั่งภายในบล๊อกทำงานไม่สำเร็จ
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
//คำสั่งการทำงานกับฐานข้อมูล
scope.Complete(); //หากการทำงานไม่สำเร็จถึงบรรทัดนี้ จะทำการ Rollback ทันที
}
ลองประยุคใช้งานจริงกับตัวอย่างข้างต้น
ค่าของ TransactionScopeOption จะสามารถระบุได้ 3 ค่า คือ
- Required : หากไม่มี Transaction อื่นอยู่ให้สร้างขึ้นใหม่ หากมีอยู่แล้วให้ใช้ Transaction เดิม
- Requires New : ไม่สนใจว่ามี Transaction อื่นใดอยู่หรือไม่ ให้สร้างใหม่เสมอ
- Suppress : ไม่สร้าง Transaction
หมายเหตุ
การใช้ TransactionScope จำเป็นต้องตั้งค่า MSDTC Service ให้ถูกต้องด้วย
การตั้งค่า MSDTC Service (Windows XP,Server 2003)
http://www.codeproject.com/KB/cs/MSDTC_And_TransactionScop.aspx
การตั้งค่า MSDTC Service (Windows 7)
http://www.thereforesystems.com/turn-on-msdtc-windows-7/
No comments:
Post a Comment