عندما ASP.NET النظام.ويب.HttpResponse.النهاية() يسمى الترابط الحالي إحباط?

StackOverflow https://stackoverflow.com/questions/365249

سؤال

عندما النظام.ويب.HttpResponse.النهاية() يسمى هذا النظام.الخيط.إحباط إطلاق النار ، وهذا على ما أعتقد هو (أو حرائق) استثناء ؟ لدي بعض الأشجار وهذا يجري المدرجة في ملف السجل...

فرصة الأول

exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
12/14/2008 01:09:31::
Error in Path :/authenticate
Raw Url :/authenticate
Message :Thread was being aborted.
Source :mscorlib
Stack Trace :   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at DotNetOpenId.Response.Send()
   at DotNetOpenId.RelyingParty.AuthenticationRequest.RedirectToProvider()
   at MyProject.Services.Authentication.OpenIdAuthenticationService.GetOpenIdPersonaDetails(Uri serviceUri) in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\Services\Authentication\OpenIdAuthenticationService.cs:line 108
   at MyProject.Mvc.Controllers.AuthenticationController.Authenticate() in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\MVC Application\Controllers\AuthenticationController.cs:line 69
TargetSite :Void AbortInternal()
A first chance exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL
An exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL but was not handled in user code

هذا هو السلوك العادي و هل من الممكن أن برشاقة إحباط بدلا من (ما يبدو) المفاجئ المفاجئ بالغاء العملية ؟

التحديث

حتى الآن لم المشتركة التعداد أنه حسب التصميم.لذلك أنا أتساءل عما إذا كان من الممكن يمكننا أن نأخذ هذا السؤال لنرى إن كان يمكننا قرص رمز لجعله لا أشعر أننا إنهاء الموضوع قبل الأوان و برشاقة الخروج ...ممكن ؟ رمز الأمثلة ؟

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

المحلول

نعم، هذا هو في الواقع حسب التصميم. مايكروسوفت حتى توثيق ذلك. وإلا كيف يمكنك إيقاف بقية البرنامج من التنفيذ؟

نصائح أخرى

وليس هناك شيء من هذا القبيل بأنها "رشيقة" إجهاض. هل يمكن ببساطة فلوش () وردا على ذلك، على الرغم من، وبدلا من وضع حد له، والسماح للإطار رعاية إغلاق اتصال لك. أفترض في هذه الحالة التي تريد الرد إرسالها إلى العميل، أي، حالة نموذجية.

ووفقا ل MSDN ، واصفا الاستجابة .End () يلقي ThreadAbortException عند انتهاء الاستجابة قبل الأوان. هل حقا ينبغي أن ندعو فقط Response.End () عندما تريد استثناء أثار.

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

كنت أنظر إلى تصفية من قطع الأشجار.إذا كنت تستخدم ASP.Net المراقبة الصحية يمكنك تكوين/خريطة كل استثناء إلى مزود (سجل الأحداث ، البريد ، إلخ) للتحكم في ما إذا كان يمكنك الحصول على إشعار threadabort استثناءات أو لا.إذا كان مخصص تسجيل الدخول ثم أود فقط إضافة إذا للتحقق من ذلك.

لاحظ أنه لا يمكنك أكل ThreadAbortException حتى لو الخاص بك تسجيل رمز يفعل شيئا مثل catch(Exception e) { // log exception and then do not throw again } على ThreadAbortException لا تزال تثار مرة أخرى من خلال إطار بمجرد اللحاق بك كتلة مخارج.

لا تستخدم أسلوب Response.End () لأنه يستخدم Application.End () وإيقاف التطبيق. طلب مزيد من استخدام HTTP أو استجابة انتهاك الصفحة دورة الحياة. استخدام HttpContext.Current.Response.Close () أو HttpContext.Current.ApplicationInstance.CompleteRequest ()؛

لقد استخدمت جميع التغييرات المذكورة أعلاه ولكن لا يزال كنت الحصول على نفس القضية على تطبيق ويب.

ثم اتصلت بي استضافة تقديم & طلبت منهم لمعرفة ما اذا كان أي الحماية من الفيروسات أو برنامج تشغل الملفات إلى نقل عبر HTTP.أو مزود خدمة الإنترنت/الشبكة لا يسمح الملف إلى نقل.

قاموا بالتحقق من إعدادات الخادم & تجاوز "مركز بيانات مشترك جدار الحماية" من أجل خدمة بلدي والآن لدينا بدأ تطبيق لتحميل الملف.

نأمل أن يكون هذا الجواب سوف تساعد شخص.هذا هو ما عملت بالنسبة لي

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