gpt4 book ai didi

http - IIS 不会同时向同一客户端发送两个响应(仅适用于 ASP)

转载 作者:可可西里 更新时间:2023-11-01 15:11:48 26 4
gpt4 key购买 nike

我有 2 个 ASP 页面。

我从 Firefox 向第一页发出请求(在服务器端处理需要 30 秒),在 30 秒的执行期间,我从 Firefox 向第二页发出另一个请求(在服务器端花费不到 1 秒),但它确实在 31 秒后出现。因为它等待第一个请求完成。

当我从 Firefox 请求第一页然后从 IE 请求第二页时,它是即时的。

基本上 ASP - IIS 6 以某种方式将每个客户端一次限制为一个请求(长处理请求)。我需要在我的 .NET 客户端应用程序中解决这个问题。

这在 3 个不同的系统中进行了测试。如果你想测试你可以试试最后的 ASP 脚本。

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

注意:

  • 这与 HTTP Keep Alive 无关
  • 这与持久连接限制无关(我们尝试在 Firefox 和 .NET 中使用 Net.ServicePointManager.DefaultConnectionLimit 增加此限制)
  • 这与用户代理无关
  • 这不会发生在 ASP.NET 中,所以我认为它与 ASP.dll 相关
  • 我试图在客户端而不是服务器上解决这个问题。我无法直接控制服务器,它是第 3 方解决方案。

有什么办法可以解决这个问题吗?

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

最佳答案

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

默认情况下会发生这种情况,即使您实际上并未在相关页面中使用 session 对象也是如此。

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

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

然而,在大多数情况下,ASP 代码对 session 对象有一些用途(甚至它只是将 session 标记为已登录)。在这种情况下,除非将调用的两个 ASP 页面分离到单独的应用程序中,否则您将无法摆脱这种行为。

关于http - IIS 不会同时向同一客户端发送两个响应(仅适用于 ASP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1150369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com