我遇到了一个难以描述的问题。我将从重现步骤开始,然后继续详细信息。所以步骤一般:
结果是: 比方说,第一个操作需要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行)。
为什么运行步骤2会出现超时,尽管步骤3没有任何延迟执行?
编辑:
感谢@arknotts,似乎这是一个会话锁定。
只想为那些将面临同样问题的人分享一些链接:
答案 0 :(得分:3)
ASP.NET默认情况下只允许每个会话一次运行一个请求。在此期间的任何其他请求将排队。当请求#1正在运行时,请求#2被阻塞,直到第一个完成。请求#3处理得很好,因为它被分配了与其他会话不同的会话(通过使用隐身模式/其他浏览器)。你可以做两件事: