我遇到了难以描述的问题。我将从重现的步骤开始,然后继续细节。因此,在一般的步骤:同时开始的两个并行请求一个接一个地执行
- 经营的网站上长期运行的操作(变更申报状态,POST)
- 尝试在同一浏览器中打开另一个页面,而另一个选项卡(表报告,GET)
- 尝试打开同一个页面上的步骤2,但使用其他浏览器/隐身模式下
这样做的结果是: 比方说,第一个操作需要80秒,完成后,第二操作时间与第一个完全相同,但是,最感兴趣的是什么第三个完成不到1秒。所有3个请求都使用相同的凭据。
该应用程序使用ASP.NET MVC 3构建; IIS 8.5,.NET v4.5应用程序池。没有数据库锁。
长时间运行的操作是对同一应用程序中托管的内部asmx Web服务(许多调用,一个接一个,平均执行时间为1.5秒)进行调用。所有步骤都使用同一控制器的不同方法。
这里是IIS log步骤(步骤1-线67,步骤2-线68步骤3-线14)。
尽管步骤3没有任何延迟地执行,为什么通过运行步骤2有这样的超时?
编辑:
感谢@arknotts,似乎这是一个会话锁定。
只是想分享一些链接,这些谁都会面临同样的问题:
- Can a single asp.net user make more than one request at a time if the Session is in use?
- ASP.NET Session State Overview(并发请求和会话状态部分)
- I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it