2009-07-14 94 views
6

我有一個C#服務連續運行與用戶憑據(即不是本地系統 - 我不能改變這一點,雖然我想)。在大多數情況下,該服務似乎運行正常,但經常彈出,無明顯原因重新啓動(服務器管理器設置爲在崩潰時重新啓動服務)。正確處理資源使用SmtpClient

我做大幅度事件記錄,我有一個分層方法異常處理,我認爲它可以使至少某種意義:

  • 從本質上講,我得到了頂級泛型異常,空異常和啓動異常處理程序。
  • 然後我在「命令級別」(即特定的服務運行行爲)
  • 最後我處理在類級別處理的幾個例外

我一直有不同的處理程序看看是否有任何資源沒有正確發佈,我開始懷疑我的郵件代碼(發送電子郵件)。我注意到我沒有調用MailMessage對象的Dispose,現在我已經重寫了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); 
     } 
    } 

回答

1

documented issues與SmtpClient類。我建議購買第三方控制,因爲它們不太貴。奇爾卡特是一個體面的。

+0

感謝您的信息 - 我可能不得不看看。令人奇怪的是,MailMessage對象實現了IDisposable,但SmtpClient卻沒有。 – 2009-07-14 22:40:55