0

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

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

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

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

在这种特殊情况下,我使用的是 IIS6,并且我的所有 asp 页面都分配给了一个自定义应用程序池,该池的工作进程设置为 1(我不确定这是否会改变什么?

4

2 回答 2

0

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

另一方面,如果您将会话变量保存在 Application 对象中,则多个同时请求共享变量,并且如果没有同步,所有的地狱都会崩溃。

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

于 2010-09-15T18:01:33.777 回答
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
于 2010-09-15T19:07:36.247 回答