Могу ли я продлить жизнь Сессии или экземпляра или контроля GC? - PullRequest
2 голосов
/ 15 декабря 2011

Я разработал веб-приложение C # на Asp.net. это своего рода приложение для интранета. Есть несколько страниц, которые используются для процессов Crud. Но все хорошо в местном тесте. Нажмите F5:
1) GetList () -> OK
2) AddNew () -> Ok
3) Сохранить () -> ОК

Но многопользовательский (Реальный мир) угадал эту ошибку:
ссылка на объект не установлена ​​для экземпляра объекта

НО все хорошо на местном. Пользователь сказал, что «Да, все в порядке через 2-3 часа, но после обеда. Я вижу ошибку: ссылка на объект не установлена ​​на экземпляр объекта» *

У меня есть 2 сценария

  • проблема в том, что GC.Gc может использовать мой экземпляр для создания вышеуказанных методов!
  • Время сеанса

Пожалуйста, подумайте 2 сценария; как продлить срок действия экземпляра или сеанса или контроля GC или любого другого лучшего мнения? Спасибо ...

С наилучшими пожеланиями ...

Ответы [ 5 ]

3 голосов
/ 15 декабря 2011

Вы должны быть в состоянии воспроизвести проблему, а затем использовать точки останова / трассировки, чтобы выяснить, где ошибка. Это не обязательно связано с тайм-аутом сеанса, но это может произойти, если ваш пользователь не использовал приложение в течение 15 минут или более.

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

Итак, убедитесь, что вы можете воспроизвести проблему, возможно, вы быстро ее исправите (а если нет, сообщите свои результаты здесь!)

2 голосов
/ 15 декабря 2011

Вы можете установить Session таймаут из web.config:

<sessionState timeout="30"></sessionState>

, где timeout в минутах.Подробнее о настройке элемента sessionState здесь .

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

Это может быть тайм-аут сеанса. Я советую добавить несколько событий в событие Global.asax Session_End, чтобы увидеть, когда это произойдет (если вообще будет). Это может помочь вам с этой ошибкой. Ведение журнала во многих местах обычно помогает отладить сложные или периодически возникающие проблемы. Если вы хотите серьезно относиться к ведению журнала, проверьте библиотеку log4net (бесплатно). Довольно мощный.

0 голосов
/ 15 декабря 2011

Это определенно не сборщик мусора, так как он не будет собирать память, на которую ссылаются.

Единственный способ убедиться, что причина «истек сеанс» или нет, заключается в следующем:

  1. Найдите, где ошибка
  2. Определите причину

В вашем случае отладка может быть немного затруднена, так как пользователь, скорее всего, столкнулся с ошибкойна производстве.Так что вам нужен какой-то тип системы регистрации.Если вам нравится классическая регистрация, вы можете использовать log4net .Если вы хотите получать уведомления по электронной почте об исключениях и т. Д., Вы можете использовать Elmah .

0 голосов
/ 15 декабря 2011

Если вы не установили таймаут для своего веб-приложения, оно по умолчанию вернется к 20 минутам.Если пользователь оставил экран простаившим более чем на время по умолчанию, время сеанса истечет, и вы, вероятно, получите ошибку, с которой сталкивается пользователь (печально известный желтый экран смерти).

состояние сеанса в файле web.config, см. следующую ссылку:

Установка свойства времени ожидания сеанса

@ misha привела пример того, как это сделать.*

Я бы также попробовал то, что предложил @Roy, и попытался бы воспроизвести ошибку в среде dev.

...