Классический ASP одновременные звонки от разных пользователей - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть это классическое ASP веб-приложение. Каждый пользователь должен войти в систему, и его наиболее важные данные хранятся в переменных сеанса. Серверная часть - это MS-SQL.

Когда пользователь отправляет на определенную страницу, он выполняет много работы, включая создание файлов и доступ к базе данных, поэтому выполнение каждого запроса может занять до 2-3 секунд.

Вот моя проблема: когда пользователь отправляет на эту страницу, в то время как он ждет, если другой пользователь отправляет на ту же страницу, оба запроса выполняются одновременно, и мои переменные VBScript смешиваются. Другими словами, IIS (?) Не ожидает завершения первого запроса перед отправкой второго.

Я пытался реализовать какой-то пул с использованием объекта Application, но он с треском провалился. Мне нужно быть в состоянии угрожать каждому пользователю по одному. Не имеет значения, ждет ли второй пользователь первого.

В данном конкретном случае я использую IIS6, и все мои страницы asp назначены пользовательскому пулу приложений, рабочий процесс этого пула установлен на 1 (я не уверен, что это что-то меняет?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010
<%@ 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
0 голосов
/ 15 сентября 2010

Если вы храните переменные сеанса в объекте Session, все должно быть в порядке.

Если, с другой стороны, вы сохраняете переменные сеанса в объекте Application, множественные одновременные запросы совместно используют переменные, и без синхронизации все чертовски разрушается.

Где вы храните переменные сеанса? Укажите фрагмент кода.

...