Переменные сеанса IIS ASP.NET InProc случайно не записываются в сеанс - PullRequest
1 голос
/ 12 ноября 2010

Существует множество информации о вещах, заставляющих сеанс InProc удалять объекты сеанса, но это не то, что здесь происходит. Мы пропускаем отдельные переменные в стабильных объектах сеанса InProc и не уверены, что они не записываются или теряются после успешной записи. Я подтвердил с WinDBG, что сеансы являются живыми и содержат некоторые, но не все, данные, записанные для них.

Guid g = System.Guid.NewGuid();
this.Context.Session.Add(g.ToString(), result.ImageData);           
output.Write("<img src=\"display.aspx?id=" + g.ToString() + "\">");

Этот код довольно прост и работает безупречно в Test. В производстве, однако, при большой нагрузке он выходит из строя ~ 1% времени. Если мистер Смит заходит на сайт и пытается отобразить 4 фрагмента данных изображения, 2 из них могут быть сохранены во время сеанса, а два из них будут потеряны.

Объект сеанса InProc для мистера Смита существует. Журналы трафика показывают, что он нажал 4 раза, каждый с различным параметром id. Но в его объекте сеанса InProc есть только 2 направляющих вместо 4. Два объекта сеанса, которые мы захватили, соответствуют двум идентификаторам, показанным в журнале трафика (его 1-й и 3-й клики). Журналы трафика для его 2-го и 4-й клик, тем не менее, показывает идентификатор guid, которого нет в его объекте сеанса InProc.

Строки 1 и 3 приведенного выше кода, очевидно, работали для этих 2-х и 4-х кликов, иначе у него не было бы идентификатора в URI, чтобы он мог щелкнуть. Строка 2, однако, кажется, молча провалилась каким-то образом. Если бы возникло какое-либо исключение, я бы ожидал, что мы никогда не дойдем до третьей строки. Я не вижу способа, чтобы пользователь мог получить идентификатор guid, но сеанс не смог его получить. Другая возможность состоит в том, что строка 2 работала успешно, но переменная позже исчезла, чего я даже не представляю.

Кто-нибудь может подумать о чем-нибудь еще? Или, может быть, предложение о способе воспроизведения такой проблемы?

Подробнее: ASP.NET v3.5 IIS 6 Нет Веб Садоводство У нас запущена веб-ферма, но пользователи постоянно возвращаются на один и тот же сервер. Сейчас я исследую, могут ли пользователи ускользнуть на другой сервер.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2010

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

http://www.asp101.com/tips/index.asp?id=165

0 голосов
/ 12 ноября 2010

Что ж, простой способ выяснить, связана ли проблема с балансировщиком нагрузки и слипшим сеансом, - полностью прекратить его использование и посмотреть, воспроизводится ли проблема.

Если это невозможно, вы можете сохранить сеанс вне процесса [сервер состояний] и снова проверить сеансы. Я работал в Microsoft Global Technical Support и видел много случаев, когда липкая сессия просто не работает!

http://aspalliance.com/1182

...