【发布时间】:2010-10-31 12:05:27
【问题描述】:
我有以下场景(Asp.net 3.5、Windows Server 2008 R2、IIS7):
- User1 使用 Firefox 登录 abc.com,然后转到需要几分钟才能加载的页面。
- 在加载该页面时,User1 无法加载站点上的任何其他页面。
- 使用此浏览器的用户 1 在站点上的所有其他页面请求都不会收到响应,直到第一个页面完成加载或超时(然后其他请求快速连续完成)。
- 如果我打开不同的浏览器(Chrome,虽然也可以很容易地使用 IE)并使用同一用户登录该站点,但第一页仍在加载(并且其他请求处于暂停状态),但我没有加载页面时出现问题。
因此,似乎一个单独的用户会话一次只能处理一个请求(因为使用不同浏览器登录的同一用户实际上是与 ASP.net 不同的会话)。
我想要发生的是,在加载 User1 的长时间加载请求时,User1 能够加载站点上的其他页面(在同一浏览器中)。
监控服务器,没有内存问题(Sql Server 也没有)。我正在这样做,而我是唯一使用该网站的人。站点是 ASP.net 3.5,使用 Forms 身份验证。只有非标准的设置细节是 ViewState 被存储在 Session 中。
到目前为止,在我的搜索中,我还没有找到与此相关的任何内容。如果这是预期的行为,我该如何覆盖它?如果这不是预期的行为,可能是什么原因造成的,我该如何解决?
【问题讨论】:
-
第一个问题——需要几分钟才能完成的服务器上发生了什么?这是预期的行为吗?每个用户是否都会遇到这种情况,或者这种情况是作为 App_Start() 的一部分发生的还是它被称为什么?
-
这是用户将要访问的特定页面。通常是预期的行为,可能会非常长时间运行查询(用户可以查询包含数百万条记录的表)。这也是由于意外行为(代码中的错误导致响应需要很长时间)而发生的。但是,即使在这种情况下,它也只会影响此用户/浏览器。
-
因此,从用户的角度来看,这是一份冗长的报告,预计会花费很长时间。您是否可以考虑异步运行报告——即“单击此链接,我们将很快通过电子邮件发送此报告”?然后,您在自己的线程中启动报告,没有人会感到不便。
-
Bob - 我已经为许多长期运行的进程执行此操作,并计划在找到需要它的进程时执行更多操作。问题是有时它是一个不适合异步的过程,有时它是一个错误,直到修复,最终可能会占用用户一段时间(而如果用户的其他页面请求得到了答复,它不会那么痛苦)。您对如何回答上述问题有任何想法吗?
标签: asp.net performance