Frage

ich benutze Server.transfer. Alles funktioniert gut, aber das Ausnahmeprotokoll zeigt die folgende Ausnahme.

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)

Jede Idee, um oben ausnahme zu vermeiden.

War es hilfreich?

Lösung

Diese Ausnahme wird durch den Anruf angeworfen Server.Transfer Um die Ausführung der aktuellen Methode zu stoppen - wird genau dasselbe geworfen, wenn Sie dies tun Response.Redirect.

Die beiden Möglichkeiten, die Sie haben, sind:

  • Fangen und überdenken Sie die Threadabortexception / formulieren Sie dieServer.Transfer
  • Stellen Sie sicher, dass Sie es nur tun Server.Transfer an Orten, an denen es nicht gefangen wird (empfohlen)

BEARBEITEN: Vergiss das, http://support.microsoft.com/kb/312629 Hat ein paar andere Vorschläge zu versuchen, aber ich empfehle immer noch #2 oben.

Andere Tipps

Eine andere Möglichkeit, dies zu lösen, besteht darin, den generierten Fehler zu fangen und ihn nicht zu überdenken:

        catch (ThreadAbortException)
        { 
        }

Caling Server.transfer ruft die Antwort auf. Dies ist eine "besondere" Ausnahme, denn während es in einem Fangblock gefangen werden kann, wird es jedoch immer am Ende des Fangblocks wiedergeworfen. Ich würde Ihre Fehlerprotokollierung Threadabortexzeptionen ignorieren lassen.

Dieses Problem tritt in der Antwort auf. Redirect und Server.Transfer -Methoden, da beide Methoden die Antwort aufrufen.

Die Lösung für dieses Problem ist wie folgt.

Verwenden Sie für Server.transfer stattdessen die Server.execute -Methode.

Besuchen Sie diesen Link zum Download -Beispielbeispiel. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

Response.end () durch Folgendes half dabei, das Problem zu beheben.

Reaktion.flush (); Antwort.CLOSE ();

Verweisen Können wir response.flush () anstelle von response.end () verwenden

Ersetzen Response.End() Mit HttpContext.Current.ApplicationInstance.CompleteRequest();

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