В сессии не могу найти материал, который я просто положил туда (но только иногда) - PullRequest
1 голос
/ 01 октября 2008

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

Во время обработки запроса:

  • В приложении ASP.NET мы помещаем объект в сессию
  • В коде, запущенном позже (тот же запрос), мы ищем то же значение сеанса. Пусто!

Так что, похоже, служба сеанса не работает, верно? Этот код выполняется сотни раз в день и никогда не дает сбоев в средах разработки или в производственной ситуации, связан только с обновлением веб-приложений на веб-сервере.

И странная вещь: мы действительно не нашли подходящего способа исправить ситуацию. Сброс IIS, остановка / запуск сервера состояний ASP.NET, правки web.config и даже перезагрузки сервера используют все бины - обычно для их исправления требуется комбинация + плюс много ругательств и выслушиваний. И в большинстве случаев это не исправлено сразу, но, может быть, через две или три минуты после третьего сброса IIS или чего-то еще. (Так что, возможно, это и не то, что исправили.)

Я схожу с ума здесь. Есть идеи, в чем может быть проблема? Это ошибка Microsoft?

Дополнительная информация:

  • Мы работаем под .NET 2.0
  • Мы используем службу состояния ASP.NET
  • Код, обращающийся к переменной сеанса и возвращающий ноль, находится в сборке, на которую ссылается приложение ASP.NET. Он использует HttpContect.Current для получения в сеансе

Ответы [ 2 ]

2 голосов
/ 01 октября 2008

HttpContext.Items доступны только в течение срока действия запроса, а не всего сеанса, поэтому это необходимо учитывать.

Чтобы ответить на оригинальный вопрос,

  1. При добавлении элемента в сеанс можно вы получаете его успешно в следующая строка?

  2. Это зависит от сервера? один сервер может видеть значение в сеанс, но не другой?

  3. DLL который пытается получить доступ к переменная, есть ли платформа целевая разница по нему, например. .net 1.1 против .net 2.0?

0 голосов
/ 01 октября 2008

Можете ли вы рассмотреть вопрос об использовании переменной сеанса?

Если вам нужны данные в одном сеансе, вы можете использовать HttpContext.Items, который намного легче, чем использование переменной сеанса.

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

Проверить на

If Not IsNothing(Context.Session) Then
    'do something
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...