我有这个经典的ASP Web应用程序。每个用户必须登录,其最重要的数据保存在会话变量中。后端是MS-SQL。
当用户提交到特定页面时,这些页面会执行很多操作,包括创建文件和访问数据库,因此每个请求最多可能需要2-3秒才能执行。
这是我的问题:当用户提交到此页面时,当他等待时,如果另一个用户提交到同一页面,则两个请求将同时执行,并且我的VBScript变量会混淆。换句话说,IIS(?)不会在发送第二个请求之前等待第一个请求完成。
我尝试使用Application对象实现某种池化,但它失败了。我需要能够逐个威胁每个用户。第二个用户是否等待第一个用户并不重要。
在这种特殊情况下,我使用的是IIS6,并且我的所有asp页面都被分配到自定义应用程序池,此池的工作进程设置为1(我不确定这是否会发生任何变化?
答案 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