سؤال

لقد أعطيت مثيرة مهمة إعادة كتابة لدينا استثناء التعامل مع النظام.في حين سوف الدولة أن التعامل مع الاستثناءات من تطبيق على نطاق وجهة نظر ليس شيئا نريد ، عادة لا مفر من عند فريقنا نقص عن الكم الهائل من العمل نحن بحاجة إلى دفع الباب ، لذا رجاء لا المشتعلة المعولمة حل معالجة الاستثناء هنا :)

لقد كان جيد للصيد انظر ماذا حلول مشتركة موجودة.في هذه اللحظة نحن نستخدم العالمية.asax مع Application_Error الحدث للقيام الخادم.GetLastError() التي يتم وضعها في الدورة الدولة ثم إعادة توجيه دعا إلى صفحة أخرى حيث الدورة البيانات ثم يتم استرجاع والإخراج في تنسيق قابل للقراءة.إعادة توجيه كما يدعو sproc التي سوف بعناية مراجعة معلومات الخطأ وهو) بالبريد الإلكتروني إلى المطورين ب) ينظر اليها من صفحة ويب للعرض فقط من قبل المطورين.

طريقة جديدة رأيت من فعل الأشياء باستخدام IHttpModule واجهة استخدام فئة في App_Code أن تفعل شيء على طول هذه الخطوط (هذا هو بلدي سريعة التنفيذ)

Imports Microsoft.VisualBasic

Public Class ErrorModule : Implements IHttpModule

  Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
    ' Not used
  End Sub

  Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
    AddHandler context.Error, AddressOf context_Error
  End Sub

  Public Sub context_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim ex As Exception = HttpContext.Current.Server.GetLastError

    ' do something with the error
    ' call the stored procedure
    ' redirect the user to the error page

    HttpContext.Current.Server.ClearError()
    HttpContext.Current.Response.Redirect("index.htm")

  End Sub
End Class

سؤالي هو ما هي الفائدة من هذا الحل على استخدام العالمية.asax الأحداث ؟ بالإضافة إلى ذلك, ما هي أفضل طريقة لتسليم البيانات خطأ الصفحة ؟

تحرير: رمز أعلاه لا يعمل بالمناسبة ;)

تحرير: أيضا, كيف HttpModule العمل وراء الكواليس ؟ هل هو فقط تسجيل خطأ الحدث إلى أن وظيفة معينة على تطبيق تبدأ ؟

تحديث:

على مزيد من التحقيق يبدو الاستيلاء على بيانات الدورة هو حقا فوضوي عندما يتعلق الأمر باستخدام IHttpModule واجهة.لا أعتقد أن مايكروسوفت قد نضجت HttpModule بما فيه الكفاية لاستخدامها في السيناريو حتى هناك أحداث محددة الدورة البيانات الأمر خطير جدا بالنسبة لنا أن استخدام.

هل كانت مفيدة؟

المحلول

باستخدام وحدة لها ميزة كونها قابلة للإزالة بسهولة, كل ما عليك القيام به لتعطيل إزالته من <httpModules> في التكوين.

بقدر البيانات الخاصة بك يذهب, حاول الذهاب مع الملقم.نقل أو الملقم.RewritePath - من شأنها أن تبقي جميع البيانات الحالية (بما في ذلك آخر خطأ في الخادم).

إذا كان لسبب ما فإنه يزيل الخطأ الأخير ، يمكنك حفظ الخطأ HttpContext.البنود قبل نقل/إعادة كتابة ومن ثم استرجاعها بعد ذلك.

تحرير: ردا على تحرير الخاص بك ، IHttpModule يوليها أي مناسبة من المناسبات في IHttpModule.الحرف الأول التنفيذ.

نصائح أخرى

HttpModule أساسا يفعل نفس الشيء Global.asax.إنها مصممة أكثر قابلة لإعادة الاستخدام الذاتي الواردة وحدة التعامل مع الحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top