CSharp OwnCode Object reference not set to an instance of an object.

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Застала врасплох ошибка:
Выполнение действия CSharp OwnCode Object reference not set to an instance of an object.

Которая появляется через раз, то есть срабатывает (ошибка) не всегда.
Происходит она в коде:
Код:
var path = project.Variables["DIRECTORY"].Value+"\\dev.cfg";
FileInfo dir_dat = new FileInfo(path);
if (!(dir_dat.Exists)) {

// с какого email отправлять
var fromEmailString = project.Variables["fromEmail"].Value;
// куда отправлять
var toEmailString = project.Variables["toEmail"].Value;
// логин для авторизации на сервере отправки письма
var login = project.Variables["MAIL_login"].Value;
// пароль от email, от имени которого отправляем письмо
var password = project.Variables["MAIL_password"].Value;
// сервер, через который отправляем письмо
var server = project.Variables["MAIL_server"].Value;
// порт сервера, через который отправляем письмо
int port;
int.TryParse(project.Variables["MAIL_port"].Value, out port);
// нужно ли шифровать подключение (например для gmail нужно)
bool encryptConnection;
bool.TryParse(project.Variables["encryptedConnection"].Value, out encryptConnection);
// текст письма
var messageText = project.Variables["messageBody"].Value;
// заголовок письма
var messageSubject = project.Variables["messageSubject"].Value;
// файл, который нужно приложить, если ничего не нужно прикладывать, оставляем переменную пустой
var fileToAttach = project.Variables["fileToAttach"].Value;

// Формирование реквизитов письма
var fromAddress = new System.Net.Mail.MailAddress(fromEmailString, fromEmailString);
var toAddress = new System.Net.Mail.MailAddress(toEmailString, toEmailString);
// создаем подключение к почтовому серверу
var smtp = new System.Net.Mail.SmtpClient {
                            Host = server,
                            Port = port,
                            EnableSsl = encryptConnection,
                            DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
                            UseDefaultCredentials = false,
                            Credentials = new System.Net.NetworkCredential(login, password)
                        };
// создаем письмо
var message = new System.Net.Mail.MailMessage(fromAddress, toAddress) {
                                        Subject = messageSubject,
                                        Body = messageText,
                                        IsBodyHtml = false,
                                    };
// если у нас есть вложение, то добавляем его
if (!string.IsNullOrEmpty(fileToAttach))
{
    var attach = new System.Net.Mail.Attachment(fileToAttach);
    message.Attachments.Add(attach);
}
string result;
try
   {
   //Отсылаем сообщение
    smtp.Send(message);
    message.Dispose();
    result = "Письмо отправлено";
   }
   catch (Exception e)
   {
     result = e.InnerException.Message.ToString();
   }
return result;  
  
} else {return "Письмо не отправлено!";}
Вариант, что какая-то переменная была пустая или что-то в этом роде - отпадает, так как в момент Bad end'a я сохранил значения всех переменных. Всё ок.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
по возможности хотелось бы получить тестовый шаблон для воспроизведения
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
по возможности хотелось бы получить тестовый шаблон для воспроизведения
Склепал простой шаблон для теста, который с определенным интервалом шлет письма (так же через яндекс).
После запуска в Zennoposter (в 3 потока) ошибка возникла через 48 минут 53 секунд.
2016-07-01_15-19-12.png

Шаблон выслал в ЛС.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
rostonix проверяли шаблон, есть подвижки?
P.S. Как Вы думаете, если какая-то зависимость ошибки от виртуальной памяти?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Немного непонятно. Вы с одной почты отправляете письмо каждые 5-10 секунд и отправка прекращается спустя 48 минут первый раз?
если после этого сразу же запускаете шаблон снова, снова отправка начинается?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Немного непонятно. Вы с одной почты отправляете письмо каждые 5-10 секунд и отправка прекращается спустя 48 минут первый раз?
если после этого сразу же запускаете шаблон снова, снова отправка начинается?
В оригинальном шаблоне письмо отсылается в одном потоке 1 раз в 24 часа. И на второй или третий день вылетает ошибка.
Письмо отправляется с одного ящика.

В тестовом шаблоне я сделал, чтобы письмо отправлялось чаще, да бы быстрее вызывать ошибку.
Если после ошибки сразу же перезапустить шаблон, то отправка писем продолжится.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
понял. подумаем
 

progon

Client
Регистрация
01.07.2013
Сообщения
21
Благодарностей
0
Баллы
1
Застала врасплох ошибка:
Выполнение действия CSharp OwnCode Object reference not set to an instance of an object.
Свою проблему решил. Ошибка в проекте была, переменная login использовалась не только для отправки почты.
Сейчас все работает стабильно.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Свою проблему решил. Ошибка в проекте была, переменная login использовалась не только для отправки почты.
Сейчас все работает стабильно.
То есть у Вас входящая и исходящая почта была одинаковой или...?
 

progon

Client
Регистрация
01.07.2013
Сообщения
21
Благодарностей
0
Баллы
1
То есть у Вас входящая и исходящая почта была одинаковой или...?
Нет, у меня проект, кроме отправки почты еще делает действия на сайте с авторизацией. Так переменная логин для авторизации ставилась как логин для отправки почты, ну и проект пытался отправить почту с не верным логином.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Нет, у меня проект, кроме отправки почты еще делает действия на сайте с авторизацией. Так переменная логин для авторизации ставилась как логин для отправки почты, ну и проект пытался отправить почту с не верным логином.
У меня видимо что-то другое т.к. по бекапу переменных во время падения "перемешивания" замечено не было. Да и демо проект, что я скинул rostonix, не содержит более ничего кроме отправки почты, а ошибка все равно появляется.
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
Понимаю, что прошло уже более 2х лет, но лично у меня ошибка до сих пор актуальна.
Может есть решение?
 

aeremx

Client
Регистрация
19.09.2019
Сообщения
27
Благодарностей
8
Баллы
3
В общем, эта ошибка из-за того, что объект, к которому производится доступ, не существует в данный момент. Проверка на null спасает ситуацию.

К слову, у меня была такая ошибка была в коде ниже (все рабоает прекрасно пока в документе присутствуют <br> тэги)

C#:
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//br")){
    node.ParentNode.ReplaceChild(doc.CreateTextNode(" "), node);
}
Переписал этот код на:

C#:
var brTags = doc.DocumentNode.SelectNodes("//br");

if (brTags != null) { // проверка на существование объекта
    foreach (HtmlNode node in brTags){
        node.ParentNode.ReplaceChild(doc.CreateTextNode(" "), node);
    }
}

Ошибка пропала, программа прекрасно себя чувтствует.

P.S. Код выше использует внешнюю библиотеку HtmlAgilityPack, плюс дополнительно подключена System.Xml 4.0.0.0
 
Последнее редактирование:
  • Спасибо
Реакции: Trader1985

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)