2008-08-15 4 views
20

自己紹介文です。私のasp.netアプリケーションがThreadAbortExceptionを投げているのはなぜですか?

何が間違っていても、なぜ私のtry catchにバブルが入りますか?

何百回もログに表示されるのはなぜですか?

は、私がそのに初心者くさい質問を知っているが、このサイトがある場合つもり検索ランキングを取得し、我々はこれはおそらくのResponse.Redirect呼び出しから来ている彼らに

答えて

18

を依頼する必要がありnewbsに描きます。説明については、このリンクをチェックしてください:

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

(ほとんどの場合、偽のResponse.Redirect(URLなど)を呼び出すと、問題を修正)

+5

上記のリンクが壊れていることに注意してください。 – JoshL

+3

Ericの答えは正しいですが、falseパラメータを渡すと、現在のスレッドが中断されていないこと、つまりResponse.Redirectのコードが実行されることに注意してください。 – CodeClimber

7

をThreadAbortExceptionのための最も一般的な理由はResponse.End, Response.Redirect, or Server.Transferを呼んでいます。マイクロソフトでは、これらの機能の代わりに使用する必要があるいくつかの機能を公開しています。

+0

ありがとうございます!!!!!! –

1

Response.End()(Response.Redirectを呼び出して2番目のパラメータとしてfalseを渡さずに呼び出すときに発生する)が呼び出されたときに発生します。これは設計どおりに動作しています。通常、Response.Redirectを呼び出すと、リダイレクトが直ちに実行されます。詳細については、これを参照してください。

Response.Redirect and the ThreadAbortException

0

内部Thread.Abortを使用し、(少なくとも)3つのAPIがあることを知って、私はそれについて何をすべきかをうまくする方法を、より実用的な用語をでお答えしたいと思います。

私たちにとって、このエラーは突然記録され始めました。何が変わったの?私たちはサイトマップを扱っていたいくつかのデータベース手続きでバグを修正しました。

log4netのログでは、GooglebotのIPアドレス66.249.78.xがGoogleのサイトをより積極的に探していることにつながるサイトマップの変更についての私の理論を支持しました(NLBの背後にある)X-Forwarded-画像の場合

最初に、Googlebotだけがこの問題を引き起こした理由を知ることができました。どのコードパスでもResponse.Redirectなどを使用していても、他のクライアントはトリガーしていません。

したがって、HttpApplication.Errorハンドラでは、すべてのヘッダーで詳細な出力をログに記録するコードを追加し、HttpResponseHttpContextのほとんどのデータがログに記録されました。

これは私が問題GooglebotがiPhoneのユーザーエージェント文字列を使用して、そので武装されて、私は「iPhone」用のコードベースを検索して出てくることができたということであったことを見てみましょう:

private void CheckIPhoneAccess() { ... } 

そして、リダイレクトを使用します。

どうすればよいですか?

この古くなったコードベースでは、すべてのResponse.Redirect呼び出しを再パッチする価値はないので、アプリケーションのログレベルをThreadAbortExceptionに下げます。

私はGooglebotのモバイルクローラの動作を変更します、それは私たちのサイトには、それが唯一の最初のヒットにリダイレクトするため、携帯電話のに役立つかについての「嘘」にリードは、その後、それはクッキーを読み取り、画像が表示されません。 GooglebotはそのCookieをキャッシュしていないようです。

これは完璧ではありませんが、サイトは再構築される予定です。おそらく別のチームがScalaなどを使っているので、実際にはこれは良い選択だと思う。私は、コメントを追加しますと、後で問題を再検討することがあり、このアドバイスをカプセル化Response.SafeRedirect拡張モジュールをビルド:

Why Response.Redirect causes System.Threading.ThreadAbortException?

ルーク

+0

追加する必要があり、HaveSeenIPhonePromo Cookieが設定されていないため、Googlebot-Mobileはリダイレクトされたままです。それが根本的な原因でした。 –

0

のResponse.Redirectは、この例外を与える理由の理由はasp.netでありますこのAPIをThread.Abort()で内部実装します。このメソッドが呼び出されると、特別なThreadAbortExceptionがスローされます。この例外は、任意のcatchブロックでは飲み込まれません。各キャッチブロックの最後にスローされます。

関連する問題