سؤال

أنا باستخدام الملقم.نقل.كل شيء يعمل بشكل جيد, ولكن استثناء تسجيل الدخول تظهر الاستثناء التالي.

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)

أي فكرة لتجنب أعلاه استثناء.

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

المحلول

هذا الاستثناء هو رمي طريق الدعوة إلى Server.Transfer من أجل وقف تنفيذ الطريقة الحالية - بالضبط نفس الشيء يحصل ألقيت إذا كنت تفعل Response.Redirect.

اثنين من الخيارات التي لديك هي:

  • قبض على rethrow ThreadAbortException / reperform على Server.Transfer
  • تأكد من أن كنت فقط Server.Transfer في الأماكن حيث أنه لن يتم القبض على (مستحسن)

تحرير: نقطة الصفر ، http://support.microsoft.com/kb/312629 وقد اثنين من الاقتراحات الأخرى في محاولة ، ولكن ما زلت أوصي #2 أعلاه.

نصائح أخرى

طريقة أخرى لحل هذه, هو للقبض على إنشاء خطأ و لا rethrow ذلك:

        catch (ThreadAbortException)
        { 
        }

سيبلغ الخادم.نقل استجابة الدعوة.الغاية التي دائما يلقي ThreadAbortException.هذا هو "خاص" استثناء لأنه في حين أنه يمكن أن تكون اشتعلت في كتلة catch, وسوف يكون دائما إعادة طرح في نهاية كتلة catch.لقد تم تسجيل الخطأ تجاهل ThreadAbortExceptions.

تحدث هذه المشكلة في الاستجابة.الكمبيوتر الخادم.طرق نقل لأن كلا أساليب استجابة الدعوة.نهاية داخليا.

الحل لهذه المشكلة هو كما يلي.

على الملقم.ونقل استخدام الملقم.أسلوب التنفيذ بدلا من ذلك.

زيارة هذا الرابط لتحميل عينة سبيل المثال. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

استبدال استجابة.النهاية() من خلال ما يلي ساعد في حل المشكلة.

استجابة.دافق();استجابة.Close();

الرجوع يمكننا استخدام الاستجابة.دافق () بدلا من الاستجابة.النهاية()

محل Response.End() مع HttpContext.Current.ApplicationInstance.CompleteRequest();

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