在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.
任何人都可以了解为什么第二个线程被创建以及为什么它开始处理我的默认文档?
请注意:
似乎IIS / ASP.Net中的某些内容被配置为开始处理错误的默认页面,但这对我来说是新行为吗?
我已经尝试过对此进行研究,但似乎唯一可能与之相关的是线程敏捷性,但我不太确定......?
答案 0 :(得分:1)
似乎有两个HTTP请求同时运行。由于每个请求(通常)都在其线程上执行,因此这种情况是有意义的。
默认情况下,HTTP请求不共享状态。它们根据不同的数据运行。因此,这不是线程安全问题。
此规则的例外情况是,如果您明确共享状态,例如使用静态变量。你不应该出于各种原因这样做。
调试问题启动Fiddler并检查正在执行的HTTP请求。同样在两个并发线程的每一个上都有示例HttpContext.Current.Request.RawUrl
。
答案 1 :(得分:0)
在错误的MyPage.aspx中删除了大量内容后,我遇到了有罪的代码:btnShowPost.ImageUrl = SitePath + "post.png";
(它从未在if语句后面访问过),因此图像<asp:Image ID="btnShowPost" runat="server" />
从未设置必要的ImageUrl。
没有它,显然这是标准的浏览器行为:任何img,脚本,css等,带有 src = missing,将使用默认路径作为url。 iis通常会重定向到default.aspx(或默认值)。