2009-07-19 27 views
6

我有2个ASP页面。IIS不会同时向同一客户端发送两个响应(仅适用于ASP)

我向Firefox的第一页发送请求(,需要30秒钟在服务器端处理),并且在执行30秒期间,我会从Firefox执行另一个请求到第二页(小于在服务器端1秒),但它在31秒后才会出现。因为它等待第一个请求完成。

当我向Firefox请求第一个页面,然后从IE请求第二个页面时,它只是一瞬间。

所以基本上ASP-IIS 6不知何故限制每个客户端一次请求(长处理请求)。我需要在.NET客户端应用程序中解决这个问题。

这是在3个不同的系统测试。如果你想测试,你可以尝试最后的ASP脚本。

此行为在长时间的SQL执行中或仅在耗时的ASP操作中是相同的。

注:

  • 这不是HTTP的Keep Alive
  • 这不是永久连接限制(我们试图增加这在Firefox,并与Net.ServicePointManager.DefaultConnectionLimit .NET)
  • 这不是关于用户代理
  • 这不会发生在ASP.NET中,所以我认为这是与ASP.dll
  • 我是tryi在客户端而不是服务器上解决这个问题。我没有直接控制服务器,这是第三方解决方案。

有没有办法解决这个问题?

示例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" 
%> 

回答

8

这是由于ASP管理会话的方式。 Session对象是单线程的,因此一次只能由一个工作线程访问。当第二个请求到达同一个会话时,已经由一个现有线程处理,该请求由ASP排队,直到会话对象可用。

即使您没有在相关页面中实际使用会话对象,也会出现这种情况。

因此,当您从FF发出一个请求并从IE发出另一个请求时,您将有两个不同的会话,因此这两个请求可以同时进行。使用两个不同的IE实例可以获得相同的效果。

如果你知道你永远不需要会话对象,你可以进入应用程序配置并关闭它(这意味着没有ASP页面会触及会话对象)。在这种情况下,ASP将允许同时处理来自同一浏览器实例的多个请求(因为它无法知道请求来自同一个浏览器实例)。

但是在大多数情况下,ASP代码对会话对象有一些用处(甚至只是将会话标记为已登录)。在这种情况下,除非将被调用的两个ASP页面分隔为单独的应用程序,否则您会遇到此行为。

0

你试图使用Response.Flush?这可能会导致缓冲输出立即发送。

+0

它不起作用,我需要在更一般的模式下解决这个问题。我的.NET客户端应该像这样的任何ASP网站。 – 2009-07-19 17:32:04

0

IIS(或特定网站)设置为最大1。并发连接?

+0

否 。 。 。 – 2009-07-19 19:34:53

+0

这是特定于Firefox吗?如何处理来自IE的2个并发请求? – shahkalpesh 2009-07-19 20:15:56

相关问题