![]() |
![]() |
|
Web-расширение - ошибка Object reference not set to an object. | ☑ | ||
---|---|---|---|---|
0
VitaminC
13.01.10
✎
17:11
|
Разработано приложение на базе веб-расширения. Периодически, на разных этапах, безо всякой системы выпадает ошибка:
Server Error in '/' Application. -------------------------------------------------------------------------------- Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Простое обновление страницы несколько раз отрабатывает нормально, потом выдает вышеуказанную ошибку. Причем в разных местах, на разных объектах одного модуля. Поиск по форумам ничего не дал к сожалению. Кто сталкивался с этой проблемой, поделитесь соображениями. |
|||
1
1c_asp
13.01.10
✎
17:14
|
С проблемой сталкивался. Конкретного рецепта предложить к сожалению не могу. Я переписывал куски кода, где вываливалась эта ошибка. Как правило там были некоторые косяки.
После этого такое сообщение стало вылазить крайне редко. Еще такое вроде бывает, когда кончается тайм аут сессии. Я это борол достаточно сложно, переписыванием всех коннектов к базе на собственный код и хранением параметров соединения в параметрах сессии |
|||
2
AquaKosh
13.01.10
✎
17:40
|
(0) Чувство у меня такое, что временами где-то NULL появляется вместо объекта...
|
|||
3
VitaminC
13.01.10
✎
17:40
|
>Как правило там были некоторые косяки.
Какого рода косяки? Что примерно искать нужно? У меня тоже код в основном собственный, с созданием коннектов и работы с объектами. Возможно из-за малого опыта в веб-программировании и криво что-то написал. Но по этой ошибке никаких выводов сделать не могу. Не пойму даже в какую сторону думать ( Что интересно, на своем сервере ни разу ни удалось получить эту ошибку. У клиента - вываливается регулярно. |
|||
4
VitaminC
13.01.10
✎
17:42
|
(2) Да, ссылка явно пустая получается. Но как? Почему? Почему посреди модуля (часть кода успевает отработать)?
|
|||
5
1c_asp
13.01.10
✎
17:46
|
(2) Точнее не NULL а неспозиционированный объект
|
|||
6
1c_asp
13.01.10
✎
17:48
|
В какой функции у тебя эта ошибка вываливается ? Попробуй переместить в другую функцию, выполняющуюся позже. Например из OnLoad в PreRender
|
|||
7
1c_asp
13.01.10
✎
17:49
|
Припоминаю, кажется были у меня такие ошибки. Возникали непонятно откуда и непонятно как раньше работали. Лечились, насколько помню именно через (5)
|
|||
8
VitaminC
13.01.10
✎
18:13
|
(6) Page_Load
(7) Что значит через (5)? Вот допустим на строке reader = (V8DataReader)cmd.ExecuteReader(); спотыкается, проверю я на Null, и что делать дальше? Еще раз пытаться отработать код с начала? |
|||
9
1c_asp
14.01.10
✎
10:48
|
(8) А connection для этого cmd ты откуда берешь ?
|
|||
10
VitaminC
14.01.10
✎
12:51
|
static V8DbConnection connection = new V8DbConnection();
... protected void Page_Load(object sender, EventArgs e) { if (connection.State==ConnectionState.Closed) { connection.Database = V8Metadata.GetDatabase(""); connection.User = Session[WebConsts.UserName].ToString(); connection.Password = Session[WebConsts.UserPassword].ToString(); connection.Open(); } ... try { V8DbSelectCommand cmd = new V8DbSelectCommand(); cmd.CommandType = CommandType.Text; cmd.Connection = connection; cmd.CommandText = @" ВЫБРАТЬ ПЕРВЫЕ 1 Сотрудник, ... reader = (V8DataReader)cmd.ExecuteReader(); ... ((IDisposable)reader).Dispose(); cmd.CommandText = @" ВЫБРАТЬ Хозрасчетный.Регистратор.Дата КАК Дата, ... reader = (V8DataReader)cmd.ExecuteReader(); ... ((IDisposable)reader).Dispose(); ... } // try finally { connection.Close(); } } |
|||
11
1c_asp
14.01.10
✎
14:32
|
(10)
} ... <а вот тут потеряться коннекшн не может ?> try |
|||
12
1c_asp
14.01.10
✎
14:42
|
А на каких точно строках падает можешь сказать ?
|
|||
13
VitaminC
14.01.10
✎
18:30
|
(11) По логике программы - нет, вот тот кусок:
RadioButton1.Text = БазовыйПериод.AddMonths(-1).ToString("MMMM", ru); RadioButton2.Text = БазовыйПериод.ToString("MMMM", ru); Период = new DateTime(БазовыйПериод.Year, БазовыйПериод.Month, 1); if (RadioButton1.Checked) Период = Период.AddMonths(-1); ПериодКонец = Период.AddMonths(1).AddSeconds(-1); Я многоточиями заменил получение/обработку данных, на которых по идее ничего такого случаться не должно, чтоб код более читаемый был. (12) На всех строчках reader = (V8DataReader)cmd.ExecuteReader() (их там 6 штук), иногда на строках: ИнтерфейсРуководителя = (bool)V8.Call(connection.Connection, "WebИнтерфейсРуководителя", Context.User.Identity.Name.ToString()); ПользовательРуководитель = (bool)V8.Call(connection.Connection, "WebПользовательРуководитель", Context.User.Identity.Name.ToString()); но тут другая ошибка: External component has thrown an exception. Причем эти строки идут подряд, иногда падает на первой, иногда на второй. Сам понимаешь, между ними ничего не происходит, точнее не должно происходить неординарного. |
|||
14
1c_asp
14.01.10
✎
18:43
|
(13) Ну тогда, кроме как окропить сервер святой водой, у меня идей нет.
ExecuteReader у меня никогда не падал без ошибки в коде |
|||
15
VitaminC
14.01.10
✎
18:56
|
Спасибо что попытался помочь. На других форумах и в партнерском вообще ничего..
|
|||
16
1c_asp
14.01.10
✎
19:17
|
Можно попробовать пошаманить - подвигать код в функции, выполняющиеся позднее. Например в PreRender. Мне пару раз такое шаманство помогло при непонятных косяках
|
|||
17
1c_asp
14.01.10
✎
19:21
|
еще не уверен, а точно нужна static ?
V8DbConnection connection Я в каждой функции заново открываю соединение, тормозов нет, т.к. все равно используется кэш. |
|||
18
VitaminC
14.01.10
✎
19:47
|
Да, статик остался от старых экспериментов, когда я пытался увеличиить производительность. Почему-то не всегда использует кэшированные соединения, иногда создает новые, из-за чего тормоза. Статик не нужен, уберу.
|
|||
19
1c_asp
15.01.10
✎
10:39
|
(18) Новое соединение создается тогда, когда идет утечка памяти. Крайне рекомендую включить контроль освобождения объектов (как это сделать написано в самом конце книге о web расширении)
|
|||
20
VitaminC
15.01.10
✎
12:06
|
Трассировка неосвобожденных объектов по дефолту включена у меня на сервере разработки для всех проектов, тут дело в чем-то другом.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |