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.

谁能解释为什么创建第二个线程以及为什么它开始处理我的默认文档?

请注意:

  • 我检查了全局方法是否有错误,例如 session_end、app_error 等,但没有。
  • 我在启用失败请求跟踪日志的情况下间歇性地看到 401 错误,但我不明白这将如何开始处理我的默认主页?
  • 只是为了进行完整性检查,我在 web.config 中我的默认文档列表的开头放置了一个新的文档 test.aspx,它确实被调用了。

似乎 IIS/ASP.Net 中的某些内容被配置为在出现错误时开始处理默认页面,但这对我来说是新行为吗?

我已经尝试过对此进行研究,但似乎唯一可能与之相关的是线程敏捷性,但我不太确定..?

4

2 回答 2

1

似乎有两个 HTTP 请求同时运行。由于每个请求(通常)在其 on 线程上执行,这种情况是有意义的。

默认情况下,HTTP 请求不共享状态。它们对不同的数据进行操作。因此,这不是线程安全问题。

此规则的一个例外是,如果您明确共享状态,例如使用静态变量。由于各种原因,您不应该这样做。

要调试问题,请启动 Fiddler 并检查正在执行的 HTTP 请求。也是HttpContext.Current.Request.RawUrl两个并发线程中的每一个的示例。

于 2012-09-04T21:41:50.623 回答
0

在删除了有问题的 MyPage.aspx 中的大量内容后,我遇到了有罪的代码行:(btnShowPost.ImageUrl = SitePath + "post.png";它从未在 if 语句后面被访问过),因此图像<asp:Image ID="btnShowPost" runat="server" />从未设置必要的 ImageUrl。

没有它,显然这是标准的浏览器行为:任何缺少 src= 的 img、脚本、css 等都将使用默认路径作为 url。iis 通常会重定向到 default.aspx(或任何默认值)。

请参阅此链接的完整说明

于 2012-09-05T12:04:58.397 回答