来自不同用户的经典ASP同时呼叫

时间:2010-09-15 17:52:44

标签: asp-classic pooling

我有这个经典的ASP Web应用程序。每个用户必须登录,其最重要的数据保存在会话变量中。后端是MS-SQL。

当用户提交到特定页面时,这些页面会执行很多操作,包括创建文件和访问数据库,因此每个请求最多可能需要2-3秒才能执行。

这是我的问题:当用户提交到此页面时,当他等待时,如果另一个用户提交到同一页面,则两个请求将同时执行,并且我的VBScript变量会混淆。换句话说,IIS(?)不会在发送第二个请求之前等待第一个请求完成。

我尝试使用Application对象实现某种池化,但它失败了。我需要能够逐个威胁每个用户。第二个用户是否等待第一个用户并不重要。

在这种特殊情况下,我使用的是IIS6,并且我的所有asp页面都被分配到自定义应用程序池,此池的工作进程设置为1(我不确定这是否会发生任何变化?

2 个答案:

答案 0 :(得分:0)

如果将会话变量保存在Session对象中,一切都应该没问题。

另一方面,如果你将会话变量保存在一个Application对象中,那么多个simultaneousus请求共享变量而没有同步,所有的地狱都会崩溃。

您在哪里存储会话变量?提供代码段。

答案 1 :(得分:0)

<%@ Language=VBScript %>
<%
Option Explicit

Dim localvar

'The Log function append a string to a local file on server'
Log cStr(Now()) & " " Session.SessionID & " - debug 1"

'Function 1 takes 2 seconds RETURNS abc'
v1 = DoCrazyStuff()

Log cStr(Now()) & " " Session.SessionID & " - debug 2 " & localvar

'Function 2 takes 2 seconds RETURNS def'
v2 = DoOtherStuff()

Log cStr(Now()) & " " Session.SessionID & " - debug 3 " & localvar

'Function 3 takes 2 seconds RETURNS ghi'
v3 = DoYetMoreStuff()

Log cStr(Now()) & " " Session.SessionID & " - debug 4 " & localvar

%>

然后会显示日志

10:00:00 PM 111111111 debug 1
10:00:02 PM 111111111 debug 2 abc
10:00:04 PM 111111111 debug 3 def
10:00:04 PM 222222222 debug 1
10:00:06 PM 111111111 debug 4 ghi
10:00:06 PM 222222222 debug 2 ghi