Frage

Ich habe einen C # Service , die läuft kontinuierlich mit Benutzerdaten (das heißt nicht als Local - ich nicht ändern kann, wenn ich will). Für den größten Teil scheint der Service ok zu laufen, aber noch so oft es Bomben und Neustart ohne ersichtlichen Grund (Servicer Manager gesetzt Dienst Absturz neu starten).

Ich tue erhebliche Ereignisprotokollierung , und ich habe einen mehrschichtigen Ansatz Ausnahmebehandlung , dass ich glaube, zumindest eine Art von Sinne macht :

  • Im Grunde habe ich die Top-Level allgemeine Ausnahme, null Ausnahme und Startup-Exception-Handler.
  • Dann habe ich verschiedene Handler an den „ Kommandoebene “ (das heißt spezifische Maßnahmen, dass der Dienst ausgeführt wird)
  • Schließlich ich mit ein paar Ausnahmen bei der Klassenstufe behandelt

Ich habe bei gesucht, ob die Ressourcen nicht ordnungsgemäß freigegeben, und ich beginne meine Mailing-Code zu vermuten (Email senden). Ich bemerkte, dass ich nicht für das Mailmessage Objekt Entsorgen Aufruf , und ich habe jetzt den Sendmail-Code neu geschrieben wie unten dargestellt.

Die Grundfrage ist:

  • wird dieser Code ordnungsgemäß alle Ressourcen freigeben verwendet Mails schicken?
  • Ich sehe nicht, einen Weg zu dispose des SmtpClient Objekt ?
  • (zur Erinnerung: Ich bin nicht Objektinitialisierer mit der Probe leichter lesbar machen)
    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);
        }
    }
War es hilfreich?

Lösung

Ich weiß, diese Frage vor ist .Net 4, aber die Version 4 unterstützt jetzt eine Dispose-Methode, die ein Beenden zum smpt Server ordnungsgemäß sendet. Sehen Sie sich die Msdn Referenz und < a href = "https://stackoverflow.com/questions/2781103/c-how-to-correctly-dispose-of-an-smtpclient"> eine neuere Frage Stackoverflow .

Andere Tipps

Es gibt dokumentierten Probleme mit der SmtpClient Klasse. Ich empfehle eine dritte Partei Kontrolle zu kaufen, da sie nicht zu teuer sind. Chilkat macht ein anständiges.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top