Question

J'utilise Server.Transfer . Tout fonctionne correctement, mais le journal des exceptions affiche l'exception suivante.

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)

Toute idée d'éviter les exceptions ci-dessus.

Était-ce utile?

La solution

Cette exception est levée par l'appel de Server.Transfer afin de suspendre l'exécution de la méthode actuelle. La même chose est levée si vous exécutez Response.Redirect .

Les deux choix que vous avez sont les suivants:

  • Attrapez et relancez le ThreadAbortException / reperformer le Server.Transfer
  • Assurez-vous que vous Server.Transfer uniquement à des endroits où il ne sera pas attrapé (recommandé)

MODIFIER: supprimer ce problème, http://support.microsoft.com/ kb / 312629 propose quelques suggestions, mais je recommande tout de même le numéro 2 ci-dessus.

Autres conseils

Une autre façon de résoudre ce problème consiste à intercepter l'erreur générée et à ne pas la rediffuser:

        catch (ThreadAbortException)
        { 
        }

Caling Server.Transfer appellera Response.End qui lève toujours une exception ThreadAbortException. Ceci est un "spécial" exception car s'il peut être attrapé dans un bloc catch, il sera toujours jeté à la fin du bloc catch. J'aurais votre journal d'erreur ignorant les ThreadAbortExceptions.

Ce problème se produit dans les méthodes Response.Redirect et Server.Transfer car les deux méthodes appellent Response.End en interne.

La solution à ce problème est la suivante.

Pour Server.Transfer, utilisez plutôt la méthode Server.Execute.

Visitez ce lien pour un exemple de téléchargement. http://jayeshsorathia.blogspot.com/2012 /03/thread-was-being-aborted-error-occured.html

Le remplacement de Response.End () par les éléments suivants a permis de résoudre le problème.

Response.Flush (); Response.Close ();

Consultez Peut-on utiliser Response.Flush () au lieu de Response.End ()

Remplacez Response.End () par HttpContext.Current.ApplicationInstance.CompleteRequest ();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top