2009-07-14 22 views
6

द्वारा इस्तेमाल किया संसाधनों मैं एक सी # सेवा कि रन लगातार उपयोगकर्ता पहचान के साथ है। अधिकांश भाग के लिए सेवा ठीक चलती प्रतीत होती है, लेकिन कभी भी यह अक्सर बाहर निकलता है और कोई स्पष्ट कारण (सर्विसर प्रबंधक क्रैश पर सेवा को पुनरारंभ करने के लिए सेट है) के लिए पुनरारंभ होता है।ठीक से निपटाने SmtpClient

मैं पर्याप्त घटना प्रवेश करने कर रहा हूँ, और मैं निपटने मुझे विश्वास है कि भावना के कम से कम कुछ प्रकार बनाता है एक परतों वाले दृष्टिकोणके अपवाद है:

  • अनिवार्य रूप से मैं शीर्ष स्तर मिला सामान्य अपवाद, शून्य अपवाद और स्टार्टअप अपवाद हैंडलर।
  • तो मैं "आदेश स्तर" (यानी विशिष्ट है कि सेवा चलाता कार्यों)
  • अंत में मैं श्रेणी स्तर पर संभाला कुछ अपवादों

मैं किया गया है संभाल पर विभिन्न संचालकों मिला यह देखते हुए कि कोई संसाधन ठीक तरह से जारी नहीं किया गया है, और मुझे अपने मेलिंग कोड पर संदेह करना शुरू हो रहा है (ईमेल भेजें)। मैंने देखा कि मैं मेलमेसेज ऑब्जेक्ट के लिए निपटान नहीं कर रहा था, और अब मैंने नीचे दिए गए सेंडमेल कोड को फिर से लिखा है।

मूल प्रश्न है:

  • इस कोड को ठीक से मेल भेजने के लिए प्रयोग किया जाता है सभी संसाधनों जारी करेंगे?
  • मैं नहीं दिख रहा है के लिए एक रास्ता निपटाने 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); 
     } 
    } 

उत्तर

5

मुझे पता है कि यह प्रश्न पूर्व है .Net 4 लेकिन संस्करण 4 अब एक निपटान विधि का समर्थन करता है जो सही ढंग से smpt सर्वर को छोड़ देता है। msdn reference और a newer stackoverflow question देखें।

1

वहाँ SmtpClient वर्ग के साथ documented issues हैं। मैं तीसरे पक्ष के नियंत्रण को खरीदने की सलाह देता हूं क्योंकि वे बहुत महंगा नहीं हैं। चिलकट एक सभ्य बनाता है।

+0

जानकारी के लिए धन्यवाद - मुझे इसे देखना पड़ सकता है। यह अजीब बात है कि MailMessage ऑब्जेक्ट IDISposable लागू करता है, लेकिन SmtpClient नहीं करता है। –

+0

हाँ। ऐसा लगता है कि उस लिंक पर पोस्ट किया गया एक काम है। शायद इसे देखना चाहें। –

संबंधित मुद्दे