У меня есть C # служба , которая работает непрерывно с учетными данными пользователя (т.е. не как локальная система - я не могу изменить это, хотя хочу). По большей части служба работает нормально, но очень часто она взрывается и перезапускается без видимой причины (диспетчер сервера обслуживания настроен на перезапуск службы при сбое).
Я веду существенную регистрацию событий , и у меня есть многоуровневый подход к Обработка исключений , которая, по моему мнению, имеет по крайней мере некоторый смысл:
- По сути, я получил общий уровень универсальное исключение, нулевое исключение и обработчики исключений при запуске.
- Затем я получил различные обработчики на « уровне команды » (т.е. конкретные действия, которые выполняет служба)
- Наконец, я обработал несколько исключений, обработанных на уровне класса
Я проверял, не высвобождены ли какие-либо ресурсы должным образом, и я начинаю подозревать мой почтовый код (отправить письмо). Я заметил, что не вызывал Dispose для объекта MailMessage , и теперь я переписал код SendMail, как показано ниже.
Основной вопрос :
- правильно ли этот код освободит все ресурсы, используемые для отправки почты?
- Я не вижу способа утилизировать объекта SmtpClient ?
- (для записи: я не использую инициализатор объекта, чтобы облегчить чтение образца)
private static void SendMail(string subject, string html)
{
try
{
using ( var m = new MailMessage() )
{
m.From = new MailAddress("service@company.com");
m.To.Add("user@company.com");
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);
}
}