Потеря данных сессии Asp.net - PullRequest
4 голосов
/ 09 февраля 2012

Я говорил об этом в предыдущем вопросе, но с тех пор я сузил проблему, чтобы дать возможность получить ответ. Сначала немного фона.

У меня есть веб-сайт ASP.net, который обычно работает на локальном сервере, но когда он находится на работающем сервере и доступен извне, у него возникают некоторые проблемы с данными сеанса, которые иногда приводят к ошибкам. Первая проблема оказалась проблемой с IE9. Переменная сессии просто не сохранится после того, как достигнет второй страницы и попадет в хранимую процедуру. Я исправил это, заставив страницу работать в режиме IE7 с -

Это все еще происходит в некоторых браузерах (в частности, это происходит в Firefox), но я создал цикл, который возвращает его обратно на страницу меню, когда переменная сеанса пуста, поэтому он просто появляется, когда страница не загружается и Кнопка «Открыть» может быть нажата снова.

Однако новая проблема возникает, когда я пытаюсь сохранить данные в форме. Он передает несколько переменных сеанса в интерфейс хранимой процедуры (например, идентификатор персонала и т. Д.), И происходит то, что время ожидания истекло. Однако все тайм-ауты для сеанса, заданного в webconfig и IIS, чрезвычайно велики (много часов), и рабочие процессы настроены так, чтобы никогда не истекать или не перезапускаться. Кроме того, это происходит даже через минуту или две, так что это не может быть тайм-аут. Это так же, как случайным образом теряет значения сеанса. Странная вещь в том, что если вы вернетесь и сохраните снова - выполнив те же действия с теми же данными - это будет работать. Иногда это занимает несколько итераций, но в конечном итоге это сработает.

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

Я обдумываю обходной путь, сбрасывая переменные сеанса в переменные состояния представления, как только страница загружается, но я действительно хотел бы обратиться к проблеме напрямую, чтобы мне не приходилось сталкиваться с ней в будущем, когда Я не могу сделать что-то подобное. Есть ли какая-то часть IIS (кстати, IIS 6), которая может быть виновником? Известно ли, что переменные сеанса часто умирают, когда их часто бросают? Не могу сказать, что много знаю о настройке сервера, но я многому научился из этой ситуации, и победа над ним станет прекрасной победой для моего морального духа. Спасибо за чтение и извините, что так долго!

Ответы [ 4 ]

0 голосов
/ 27 февраля 2012

Я действительно нашел реальное решение на этот раз.Это все еще не имеет большого смысла, но я думал, что принесу это здесь, чтобы все могли видеть.Оказывается, одна из дат, которые были извлечены из таблицы, хранилась в переменной сеанса как пустое (хотя это не должно было быть), а затем каким-то образом, даже если был оператор if, который должен был предотвратитьон попытался преобразовать пустую строку сеанса в дату.Конечно странно.Это было так, как если бы сеанс имел значение при достижении оператора if, а затем, после проверки его на соответствие критериям, он изменил его на пустую строку и выдал ошибку.

Получается, что это была не проблема сессии, а странная проблема с датой.Это происходило только с одним человеком и одной конкретной датой из таблицы.Я исправил это, просто поместив вокруг себя попытку.С тех пор все работало нормально для этого человека.Еще раз спасибо за помощь всем!

0 голосов
/ 10 февраля 2012

OK!

После прочтения вашего поста и обдумывания, я думаю, что наиболее вероятной причиной проблемы является хитрый ISA Server . Прокси, как правило, возятся с содержимым HTTP, решают изменить заголовки и тому подобное. Как вы упомянули, это происходит только в том случае, если к нему обращаются извне. Это отличительная черта человека в середине выпусков.

Теперь, чтобы доказать, вы должны сравнить отправленные извне заголовки и полученные заголовки. Это немного сложно, но совсем не невозможно. Все, что вам нужно, это зарегистрировать все заголовки (запросы) на стороне сервера, пока вы делаете то же самое с компьютера клиента (возможно, с помощью fiddler).

Это должно быть в состоянии доказать изворотливый прокси - у нас похожая проблема в нашей компании.

0 голосов
/ 10 февраля 2012

Ну, я сделал пару вещей, и теперь это работает, но я не проверял, какое из них было реальным решением, и ни одно из них, насколько я понимаю, не должно было на самом деле решить проблему.Прежде всего, в какой-то момент я увеличил количество доступных рабочих процессов до трех с одного, что, как я думал, могло бы позволить пользователю запускать несколько процессов на сервере, если это необходимо, но оказывается, что это необходимо только для ферм серверов.Так что я вернул это к одному.Это было раньше, когда эта проблема возникала, и я просто истекал, чтобы посмотреть, что бы это исправить.

Второе, что я сделал, это добавил простой оператор if (если переменная сеанса пуста) в одинprivate sub, который содержит интерфейс для хранимой процедуры, которая отправляет переменную сеанса.Я думал, что это будет обходной путь, но затем я посмотрел на свои старые журналы ошибок, и даже интерфейс хранимых процедур не выдавал ошибку.Я понятия не имею, почему это вообще решило бы проблему.

Я также настроил некоторые PerfLogs, как на той странице, с которой Рахул связал меня, чтобы попытаться отслеживать, что происходит с сессиями.

Теперь, кроме странного факта, что что-то там среди этих попыток (наряду с любыми другими незначительными вещами, которые я сделал) на самом деле устранило проблему, есть факт, что это никогда не происходило локально с самого начала.Я не совсем уверен в том, что произошло, но сейчас это работает, и я не собираюсь углубляться в это снова, так как у меня много проектов, которыми я могу заняться.По моему мнению, это, скорее всего, проблема с ISA-серверами, которая может возникнуть в будущем, но мое отсутствие знаний об их настройках ограничило меня от того, чтобы по-настоящему попасть туда и поискать себя.Когда я спросил об этом, мне сказали, что это должно позволить все, что мне нужно отправить через него, чтобы пройти через это.Несмотря на это, я просто счастлив, что могу двигаться дальше и заставить это работать.Надеюсь, что все это помогает некоторым людям в подобной ситуации!Спасибо всем за помощь всем!

0 голосов
/ 09 февраля 2012

Пожалуйста, проверьте балансировку нагрузки на этом сервере.

В любом случае, просмотрите эту статью.http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...