У меня есть # Service Ĉ что работает непрерывно с учетными данными пользователя (т.е. не как LocalSystem - я не могу изменить это, хотя я хочу). По большей части сервис, похоже, работает нормально, но так часто он взрывается, и перезапускается без видимой причины. (диспетчер servicer настроен на перезапуск службы при сбое).Правильно располагающие ресурсы, используемые SmtpClient
Я делаю существенные журнала событий, и у меня есть многоуровневый подход к обработке, что я считаю, делает по крайней мере, какое-то смысл исключения:
- По существу я получил верхнего уровня Общие исключения, исключения исключений и обработчики исключений запуска.
- Потом я получил различные обработчик на «уровне команды» (то есть конкретные действия, которые запускают сервис)
- Наконец я обрабатывать несколько исключений, обрабатываемых на уровне класса
Я был глядя на то, что какие-либо ресурсы не выпущены должным образом, и я начинаю подозревать свой почтовый код (отправлять электронную почту). Я заметил, что я не звонил в Dispose для MailMessage объекта, и теперь я переписал код SendMail, как показано ниже.
Основной вопрос является:
- будет этот код правильно освободить все ресурсы, используемые для отправки почты?
- Объект SmtpClient?
- (для записи: Я не использую инициализатор объекта, чтобы сделать образец легче читать)
private static void SendMail(string subject, string html)
{
try
{
using (var m = new MailMessage())
{
m.From = new MailAddress("[email protected]");
m.To.Add("[email protected]");
m.Priority = MailPriority.Normal;
m.IsBodyHtml = true;
m.Subject = subject;
m.Body = html;
var smtp = new SmtpClient("mailhost");
smtp.Send(m);
}
}
catch (Exception ex)
{
throw new MyMailException("Mail error.", ex);
}
}
Спасибо за информацию - мне, возможно, придется посмотреть на это. Странно, что объект MailMessage реализует IDisposable, но SmtpClient этого не делает. –
Да. Кажется, есть работа, размещенная по этой ссылке. Может захотеть проверить это. –