Wenn ein ASP.NET System.Web.HttpResponse.End () aufgerufen wird, wird der aktuelle Thread abgebrochen?

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

Frage

wenn ein System.Web.HttpResponse.End () wird ein System.Thread.Abort genannt gefeuert wird, was ich vermute ich (oder Feuer) eine Ausnahme? Ich habe einige Protokollierung bekam und dies wird in der Protokolldatei aufgeführt ...

Eine erste Chance

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

Ist das ein normales Verhalten und ist es möglich, statt anmutig abzubrechen (was aussieht wie) ein plötzlicher abrupter Abbruch?

Update

Bisher es die gemeinsame Volkszählung, die es nach Design . Also ich frage mich, ob es möglich ist, die wir diese Frage nehmen und sehen, ob wir den Code optimieren könnte, um es nicht glauben, wie wir den Faden sind Endung vorzeitig und anmutig verlassen ... möglich? Code-Beispiele?

War es hilfreich?

Lösung

Ja, das ist in der Tat von Entwurf. Microsoft hat auch dokumentiert es. Wie sonst würden Sie den Rest des Programms vor der Hinrichtung stoppen?

Andere Tipps

Es gibt nicht so etwas wie eine „anmutige“ zunichte machen. Sie könnten einfach Flush () die Antwort, aber anstatt sie zu beenden und lassen Sie nehmen die Rahmenpflege für Sie die Verbindung zu schließen. Ich bin in diesem Fall unter der Annahme, dass Sie die Antwort an den Client gesendet werden sollen, das heißt, der typischen Fall.

Nach MSDN , ruft Antwort .END () führt den Threadabort wenn die Antwort vorzeitig endet. Sie sollten wirklich nur nennen Response.End (), wenn Sie die Ausnahme ausgelöst werden soll.

Es gibt nichts von Natur aus ungraceful über eine Ausnahme Ihren Stack Rekursion bis zu der aktuellen Ausführung zu stoppen. Sicherlich nicht mehr als eine Ausnahme zu werfen und es an einem gewissen unteren Platz in Ihrer Ausnahme zu kontrollieren.

Ich würde schauen Sie es von Ihrer Protokollierung bei Filterung. Wenn Sie die ASP.Net Gesundheit verwenden Überwachung können Sie konfigurieren / Karte jede Ausnahme zu einem bestimmten Provider (Ereignisprotokoll, E-Mail usw.) zu steuern, ob Sie eine Benachrichtigung für Threadabort Ausnahmen bekommen oder nicht. Wenn es benutzerdefinierte Protokollierung ist, dann würde ich nur ein hinzufügen, wenn es zu überprüfen.

Beachten Sie, dass Sie keinen Thread so, auch wenn Ihr Logging-Code so etwas wie catch(Exception e) { // log exception and then do not throw again } essen können der Threadabort tut immer noch wieder einmal Ihr Fang Block beendet durch den Rahmen angehoben werden.

Verwenden Sie Response.End () -Methode nicht, weil es verwendet Application.End () und die Anwendung beenden. Eine weitere Nutzung HTTP-Anforderung oder eine Antwort zu verletzen Seite Life Cycle. Verwenden HttpContext.Current.Response.Close () oder HttpContext.Current.ApplicationInstance.CompleteRequest ();

Ich habe alle oben genannten Änderungen aber noch war ich gleiches Problem auf meiner Web-Anwendung zu bekommen.

Dann kontaktierte ich mein Hosting liefern und fragte sie, ob eine Software oder Antivirus überprüfen unsere Dateien blockiert über HTTP zu übertragen. oder ISP / Netzwerk nicht erlaubt Datei zu übertragen.

Sie überprüften Servereinstellungen und Bypass des „Data Center Gemeinsame Firewall“ für meinen Server & jetzt unsere Anwendung gestartet, die Datei herunterzuladen.

Hoffen, dass diese Antwort wird someone.This helfen ist, was für mich gearbeitet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top