2012-02-02 3 views
0

Я работаю с IIS V6.0 и ASP.NET с .NET Framework 3.5 SP1.IIS ASP.net Сессия теряет/теряет значения 5% времени

Большинство времени суток я исправляю проблемы, связанные с ASP.NET, теряющими переменные сеанса между запросами. Это расстраивает.

Например: У меня есть страница А и страница B. В то время как дает Аргументы B объект собственного класса с

Session["something"] = myObject; //on Page A 

и Page B хочет использовать его так:

MyOwnClass myObject= Session["something"] as MyOwnClass; 

Это работает примерно в 95% случаев. Но остальные 5% myObject на B - null, а снова обновляя страницу, это может быть объект, который я снова поставил на сеанс.

Как это возможно? Что я могу сделать с этим?

Это происходит в разных браузерах. Поэтому даже компания IE7 не должна быть частью проблемы. Я пробовал различные сессии TimeOut Lengths, но ... ничего.

+2

, что вы используете для хранения сессии? InProc, StateServer или SQL Server? –

+0

Вы используете менеджер сеансов InProc? Если да, это ваша проблема, переместите его на SQL – Aristos

+0

, как я могу узнать? @ZachGreen (его не SQL) – Harry

ответ

2

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

Вот руководство для II6 изменить InProc к StateServer: http://dotnetguts.blogspot.com/2009/06/steps-for-session-inproc-mode-to.html

+0

, что звучит интересно, так что чувствуется, что он становится все хуже, поскольку все больше людей используют мой сайт, что бы вы посоветовали мне делать? – Harry

+0

В IIS вы можете проверить, использует ли сайт InProc в качестве обработчика сеанса. Если это так, вы можете переключиться на государственный сервер (убедитесь, что asp.net state server запущен в службах), чтобы убедиться, что это устраняет проблему. –

+0

Возможно, у вас есть шаги для IIS 6: http://dotnetguts.blogspot.com/2009/06/steps-for-session-inproc-mode-to.html –

3

вероятно «когда-нибудь» MyObject не MyOwnClass типа и потому, что вы используете безопасный бросок, если это произойдет, вы не получите исключение (безопасный бросок возвратит нуль является объект не является «Castable». попытки использовать явное приведение вместо:

try{ 
    MyOwnClass myObject=(MyOwnClass)Session["something"]; 
    } 
catch(InvalidCastException ex){ 
    //handle the exception 
    } 

если это не решит проблему, вы должны убедиться, что:

  • вы не перезапускать пул приложений
  • вы не меняются что-либо в вашей веб-конфигурации
  • webfarms и веб-сады: если вы настроили веб-фермы и веб-сад для своего веб-сайта. Совместное использование сеанса Inproc может вызвать проблемы.
  • Процесс w3p вашего сайта перезапускается из-за некоторой проблемы в коде. или утечки памяти.