0

VS2010 で Web アプリケーションをローカルでデバッグすると、非常に奇妙な動作が見られます。同じユーザー ジャーニー/一連のページが本番環境で発生します。

デバッグ、私はこれを見ています:

1. request for MyPage.aspx - handled by thread_1
2. (there is something on that page that IIS/ASP.Net doesn't like it seems) I'm slowly removing sections to pin-point exactly but there's
no JS, or anything fancy there just html content, user controls etc.
3. Either way a separate thread_2 to begin processing the Page_Load of my defaultdocument i.e. home.aspx is executed. There is logic in
home.aspx.cs to clear some data.
4. So when thread_1 continues processing, checks against the data above fail, resulting with the user being redirected to an error page.

2 番目のスレッドが作成される理由と、既定のドキュメントの処理が開始される理由を誰かが明らかにすることはできますか?

ご注意ください:

  • session_end、app_error などのグローバル メソッドのエラーを確認しましたが、何もありませんでした。
  • Failed Request Tracing Logging を有効にすると断続的に 401 エラーが表示されますが、デフォルトのホームページの処理を開始する方法がわかりません。
  • 健全性を確認するために、web.config の defaultdocument リストの先頭に新しいドキュメント test.aspx を配置したところ、呼び出されました。

IIS/ASP.Net 内の何かが、エラー時に既定のページの処理を開始するように構成されているようですが、これは私にとって新しい動作ですか?

これを調査してみましたが、関連していると思われるのはスレッドの敏捷性だけですが、よくわかりません..?

4

2 に答える 2

1

2つのHTTPリクエストが同時に実行されているようです。各リクエストは(通常)そのオンスレッドで実行されるため、この条件は理にかなっています。

デフォルトでは、HTTPリクエストは状態を共有しません。それらは異なるデータを操作します。そのため、これはスレッドセーフの問題ではありません。

このルールの例外は、静的変数を使用するなど、状態を明示的に共有する場合です。さまざまな理由でこれを行うべきではありません。

問題をデバッグするには、Fiddlerを起動し、実行されているHTTPリクエストを調べます。またHttpContext.Current.Request.RawUrl、2つの並行スレッドのそれぞれの例。

于 2012-09-04T21:41:50.623 に答える
0

問題のある MyPage.aspx 内の多くのコンテンツを削除した後、コードの有罪行に出くわしました: btnShowPost.ImageUrl = SitePath + "post.png";(if ステートメントの背後でアクセスされなかった) したがって、画像<asp:Image ID="btnShowPost" runat="server" />は必要な ImageUrl を設定しませんでした。

それがなければ、明らかにこれは標準的なブラウザーの動作です。src= が欠落している img、script、css などは、デフォルトのパスを URL として使用します。iis は通常、default.aspx (またはデフォルトのもの) にリダイレクトします。

このリンクで完全な説明を参照してください

于 2012-09-05T12:04:58.397 に答える