في البرمجة، غالبا ما تستخدم المعاملات. إن ما يسمى بالمعاملة عبارة عن سلسلة من العمليات التي يجب أن تنجح جميعها، وطالما فشلت عملية واحدة، يجب أيضًا التراجع عن جميع الخطوات الأخرى. على سبيل المثال، باستخدام ASP لتطوير نظام القرص الصلب للشبكة، يحتاج جزء تسجيل المستخدم إلى القيام بما يلي:
تسجيل معلومات المستخدم في قاعدة البيانات، وفتح مجلد للمستخدم لتخزين سجل تشغيل المستخدم للتهيئة، ويجب
استخدام هذه الخطوات الثلاث المعاملات، وإلا في حالة تشغيل القرص، سيؤدي الفشل دون التراجع عن تشغيل قاعدة البيانات إلى ظاهرة "المستخدم الميت" التي يمكنها فقط تسجيل الدخول ولكن لا يمكنها العمل.
نظرًا لتاريخ التطوير الخاص لأنظمة قواعد البيانات، فإن كل شيء بدءًا من Access إلى DB2 يتمتع بدعم المعاملات. لذلك، يمكن التعبير عن الخطوات المذكورة أعلاه على النحو التالي:
عند حدوث خطأ، استئناف
الخطوة التالية 1:
تسجيل معلومات المستخدم في قاعدة البيانات في بيئة المعاملات
إذا حدث خطأ، فعندئذ
أغلق الاتصال واخرج
الخطوة 2: قم بإنشاء المجلد إذا أخطأت ثم
استرجاع عملية قاعدة البيانات الأولى والخروج من Else
الخطوة 3: تشغيل قاعدة بيانات السجل في بيئة المعاملات إذا أخطأت بعد ذلك
استرجاع الخطوة الأولى، وحذف المجلد الذي تم إنشاؤه في الخطوة الثانية والخروج من End If
نهاية إذا
نهاية إذا
إرسال معاملة عملية قاعدة البيانات الأولى إرسال معاملة عملية قاعدة البيانات الثانية.
النهاية
في كل خطوة. إذا فشلت، فستحتاج إلى التراجع عن الخطوات السابقة يدويًا، مما يجعل البرنامج معقدًا ويصعب فهمه. إذا تم تحديث البرنامج في المستقبل وتمت إضافة خطوات أخرى، فستحتاج المزيد من طبقات If...Else...End If إلى التداخل، مما يجعل تدفق البرنامج أكثر تعقيدًا.
الحل الصحيح هو استخدام وظيفة التحكم في المعاملات الخاصة بـ ASP. من خلال الاتصال بخدمة MTS، يمكن لـ IIS التحكم في مجموعة متنوعة من الأنظمة التي تدعم المعاملات. عندما يرسل البرنامج إشارة "فشل"، ستتراجع جميع الأنظمة التي تدعم المعاملات تلقائيًا، حتى لو كانت العملية قد اكتملت رسميًا؛ سيتم أيضًا التراجع عن معاملات الدعم، مما يوفر طريقة مريحة للتراجع اليدوي. تتم إعادة كتابة المثال أعلاه باستخدام وظيفة التحكم في المعاملات ASP على النحو التالي:
<%@ TRANSACTION = Required %>
عند حدوث خطأ في استئناف
المجموعة التالية Conn=Server.CreateObject("ADODB.Connection")
كون.فتح....
Conn.تنفيذ "إدراج...."
كون.إغلاق
تعيين Conn=لا شيء
تعيين Conn2=Server.CreateObject("ADODB.Connection")
كون 2. مفتوح ....
Conn2.تنفيذ "إدراج...."
Conn2.Close
تعيين Conn2=لا شيء
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
إذا أخطأت، إذن
ObjectContext.SetAbort 'إعلام كافة المكونات التي تدعم المعاملات للعودة إلى الحالة السابقة وتشغيل التعليمات البرمجية للتراجع اليدوي
آخر
ObjectContext.SetComplete
نهاية إذا
تعيين FSO = لا شيء
Sub OnTransactionAbort
الرد.اكتب "خطأ"
FSO.DeleteFile Server.Mappath("a.txt") 'التراجع اليدوي لـ FSO - حذف المجلد
نهاية الفرعية
SubOnTransactionCommit
الرد.اكتب "أكمل المهمة بنجاح"
نهاية الفرعية
%>
يشير <%@ TRANSACTION = مطلوب %> في السطر الأول إلى أن ملف ASP لهذه الصفحة يتطلب دعم معاملات MTS. تتم كتابة جميع العمليات في المنتصف بترتيب عادي دون مراعاة مشكلات التراجع. تحديد ما إذا كانت هناك أخطاء في نهاية البرنامج. إذا كان الأمر كذلك، فاستدعاء أسلوب SetAbort الخاص بـ ObjectContext. سيقوم IIS بإعلام جميع المكونات التي تدعم المعاملات من خلال خدمة MTS للتراجع (قواعد البيانات بشكل أساسي)، وتشغيل Sub OnTransactionAbort للتراجع يدويًا عن العمليات التي لا تدعم المعاملات، في حالة عدم حدوث أخطاء، اتصل سيتم تشغيل طريقة SetComplete الخاصة بـ ObjectContext، Sub OnTransactionCommit لعرض رسالة نجاح.
لا يحتاج برنامج ASP بأكمله إلى كتابة تعليمات برمجية زائدة عن الحاجة لعمليات الحكم على الأخطاء والتراجع، بل يحتاج فقط إلى الحكم عليها في النهاية. حتى إذا تمت إضافة عمليات متعددة الخطوات في المستقبل، فإنه يحتاج فقط إلى التحكم في Sub OnTransactionAbort. إنها مريحة للغاية ويمكن للمبرمجين التركيز على الكتابة الإجرائية بدلاً من كتابة تعليمات برمجية لتصحيح الأخطاء.
في الواقع، يوفر ASP أيضًا العديد من الوظائف المفيدة، ولا تعتقد أنه نظرًا لأن ASP يستخدم لغة البرمجة النصية، فيجب أن تكون وظائفه ضعيفة.