Domanda

domanda autoesplicativa.

Perché questa cosa ribolle nei miei tentativi di cattura anche quando non c'è niente che non va?

Perché viene visualizzato nel mio registro centinaia di volte?

So che è una domanda da principianti, ma se questo sito otterrà un posizionamento nei risultati di ricerca e attirerà nuovi iscritti, dobbiamo chiederglielo

È stato utile?

Soluzione

Probabilmente proviene da una chiamata Response.Redirect.Controlla questo link per una spiegazione:

http://dotnet.org.za/armand/archive/2004/11/16/7088.aspx

(Nella maggior parte dei casi, la chiamata a Response.Redirect(url, false) risolve il problema)

Altri suggerimenti

Il motivo più comune per una ThreadAbortException è la chiamata Response.End, Response.Redirect o Server.Transfer.Microsoft ha pubblicato alcune funzioni suggerite da utilizzare al posto di tali funzioni.

Come altri hanno già detto, si verifica quando chiami Response.End() (che si verifica quando chiami Response.Redirect senza passare false come secondo parametro).Funziona come previsto;in genere, se chiami Response.Redirect, vuoi che il reindirizzamento avvenga immediatamente.Vedi questo per maggiori informazioni:

Response.Redirect e ThreadAbortException

Sapendo che ci sono (almeno) tre API che utilizzano internamente Thread.Abort, vorrei rispondere in termini più pratici, come capire cosa fare al riguardo.

Per noi, questo errore ha iniziato a essere registrato all'improvviso.Cosa è cambiato?Abbiamo corretto un bug in alcune procedure del database che riguardavano le mappe dei siti.

I log di log4net mostravano che l'intestazione X-Forwarded-For (siamo dietro un NLB) era l'indirizzo IP di Googlebot, 66.249.78.x, il che ha rafforzato la mia teoria sulla modifica della mappa del sito che ha portato Google a scansionare il nostro sito in modo più aggressivo alla ricerca di immagini.

La prima cosa era scoprire perché solo Googlebot era in grado di causare questo problema.Nessun altro client stava attivando il percorso del codice utilizzato Response.Redirect, o qualunque cosa.

Quindi nel HttpApplication.Error gestore, ho aggiunto del codice per registrare un output extra dettagliato con tutte le intestazioni e la maggior parte dei dati nel file HttpResponse E HttpContext vomitato per accedere.

Questo mi ha permesso di capire che il problema era che Googlebot utilizza una stringa dello user agent dell'iPhone e, armato di ciò, sono riuscito a cercare "iPhone" nel codebase e ho ottenuto:

private void CheckIPhoneAccess() { ... }

E questo utilizza un reindirizzamento.

Cosa fare al riguardo?

Bene, per questa base di codice obsoleta, non vale la pena aggiornare tutto il file Response.Redirect chiamate, quindi abbasserò il livello di registrazione per ThreadAbortException per l'applicazione.

Cambierò il comportamento del crawler mobile di Googlebot, lo farebbe non portare a "bugie" su ciò che il nostro sito offre ai cellulari poiché reindirizza solo al primo colpo, successivamente legge un cookie e mostra l'immagine.Googlebot non sembra memorizzare nella cache quel cookie.

Non è perfetto, ma il sito dovrà essere ricostruito.probabilmente da un altro team che utilizza Scala o qualcosa del genere, quindi in termini pratici penso che questa sia una buona scelta.Aggiungerò commenti e potrei rivisitare il problema in seguito, creare un file Response.SafeRedirect estensione che incapsula questo consiglio:

Perché Response.Redirect provoca System.Threading.ThreadAbortException?

Luca

Il motivo per cui Response.Redirect fornirà questa eccezione è che asp.net implementa internamente questa API con Thread.Abort().Quando viene chiamato questo metodo, viene lanciata una speciale ThreadAbortException. Questa eccezione non verrà inghiottita da nessun blocco catch.Verrà lanciato nuovamente alla fine di ogni blocco di cattura.

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