Domanda

Sto utilizzando Server.Transfer . Tutto funziona bene, ma il registro delle eccezioni mostra la seguente eccezione.

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)

Qualsiasi idea da evitare al di sopra dell'eccezione.

È stato utile?

Soluzione

Questa eccezione viene generata dalla chiamata a Server.Transfer per interrompere l'esecuzione del metodo corrente: esattamente la stessa cosa viene generata se si esegue Response.Redirect .

Le due scelte che hai sono:

  • Cattura e ricodifica il file ThreadAbortException / reperform the Server.Transfer
  • Assicurati di te esegui Server.Transfer solo in alcuni punti dove non verrà catturato (consigliato)

EDIT: grattalo, http://support.microsoft.com/ kb / 312629 ha un paio di altri suggerimenti da provare, ma raccomando comunque il n. 2 sopra.

Altri suggerimenti

Un altro modo per risolvere questo problema è quello di catturare l'errore generato e di non riproporlo:

        catch (ThreadAbortException)
        { 
        }

Caling Server.Transfer chiamerà Response.End che genera sempre una ThreadAbortException. Questo è un "speciale" eccezione perché mentre può essere catturato in un blocco catch, verrà sempre lanciato alla fine del blocco catch. Vorrei che la tua registrazione degli errori ignorasse ThreadAbortExceptions.

Questo problema si verifica nei metodi Response.Redirect e Server.Transfer perché entrambi i metodi chiamano Response.End internamente.

La soluzione a questo problema è la seguente.

Per Server.Transfer, utilizzare invece il metodo Server.Execute.

Visita questo link per un esempio di download. http://jayeshsorathia.blogspot.com/2012 /03/thread-was-being-aborted-error-occured.html

La sostituzione di Response.End () con il seguente ha aiutato a risolvere il problema.

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

Consulta Possiamo usare Response.Flush () invece di Response.End ()

Sostituisci Response.End () con HttpContext.Current.ApplicationInstance.CompleteRequest();

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top