我有2个ASP页面。
我向Firefox的第一页发出请求(需要30秒才能在服务器端进行处理),在执行30秒期间,我再向Firefox发出请求到第二页(服务器端不到1秒),但确实在31秒后出现。因为它等待第一次完成请求。
当我从Firefox请求第一页然后从IE请求第二页时,它就是即时的。
所以基本上ASP - IIS 6以某种方式将每个客户端限制为一次一个请求(长处理请求)。我需要在我的.NET客户端应用程序中解决这个问题。
这是在3个不同的系统中测试的。如果要测试,可以在最后尝试ASP脚本。
这种行为在长SQL执行中或仅在耗时的ASP操作中是相同的。
注意:
有没有办法解决这个问题?
示例ASP代码:
第一个ASP:
<%
Set cnn = Server.CreateObject("Adodb.Connection")
cnn.Open "Provider=sqloledb;Data Source=.;Initial Catalog=master;User Id=sa;Password=;"
cnn.Execute("WAITFOR DELAY '0:0:30'")
cnn.Close
%>
第二个ASP:
<%
Response.Write "bla bla"
%>
答案 0 :(得分:9)
这是由于ASP管理Sessions的方式。 Session对象是单线程的,因此一次只能由一个工作线程访问。当第二个请求到达的时间与现有线程已处理的相同会话时,该请求由ASP排队,直到会话对象可用为止。
即使您实际上没有在相关页面中使用会话对象,也会发生这种情况。
因此,当您从FF发出一个请求而另一个从IE发出请求时,您将有两个不同的会话,因此两个请求可以同时进行。使用两个不同的IE实例可以获得相同的效果。
如果您知道永远不需要会话对象,则可以进入应用程序配置并将其关闭(这意味着没有ASP页面会触及会话对象)。在这种情况下,ASP将允许同时处理来自同一浏览器实例的多个请求(因为它无法知道请求来自同一浏览器实例)。
然而,在大多数情况下,ASP代码对会话对象有一些用处(即使它只是标记了登录的会话)。在这种情况下,除非将被调用的两个ASP页分离为单独的应用程序,否则您将遇到此行为。
答案 1 :(得分:0)
您是否尝试过使用Response.Flush?这可能会导致缓冲输出立即发送。
答案 2 :(得分:0)
IIS(或特定的此网站)是否设置为最多1个。并发连接?