जब भी मैं से smtpClient.SendAsync(...)
फोन मेरी ASP.NET MVC आवेदन के भीतर, अतुल्यकालिक अनुरोध स्वचालित रूप से रद्द कर रहे हैं, भले ही SendAsyncCancel()
कभी नहीं कहा जाता है।SmtpClient.SendAsync कॉल स्वचालित रूप से रद्द कर रहे हैं
सिंक्रोनस.Send(...)
अनुरोध, दूसरी तरफ, ठीक है।
मेरे EmailService
सेवा आवरण मेरी ASP.NET MVC 3 आवेदन के भीतर से SmtpClient
साथ अतुल्यकालिक ईमेल भेजने संभालती है। स्ट्रक्चर मैप द्वारा प्रत्येक एमवीसी नियंत्रक में एक सेवा उदाहरण इंजेक्शन दिया जाता है, जो using (...) { }
कथन में एक नया SmtpClient
उदाहरण लपेटता है।
यहाँ SmtpClient
के लिए मेरे EmailService.SendAsync
आवरण विधि है:
public void SendAsync(EmailMessage message)
{
try
{
using (var smtpClient = new SmtpClient(_cfg.Host, _cfg.Port)
{
EnableSsl = _cfg.EnableSsl,
Credentials = _credentials
})
{
smtpClient.SendCompleted += new SendCompletedEventHandler(Email_OnCompleted);
var mailMessage = new MailMessage(message.From, message.To)
{
Subject = message.Subject,
Body = message.Body
};
smtpClient.SendAsync(mailMessage, message);
_logger.Info(string.Format("Sending async email to {0} with subject [{1}]", message.To, message.Subject));
}
}
catch (Exception ex)
{
_logger.Error("Async email error: " + ex);
throw;
}
}
यहाँ मेरी Email_OnCompleted
प्रतिनिधि है:
public void Email_OnCompleted(object sender, AsyncCompletedEventArgs e)
{
var mail = (EmailMessage)e.UserState;
if (e.Error != null)
{
_logger.Error(string.Format("Error sending email to {0} with subject [{1}]: {2}", mail.To, mail.Subject, e.Error));
}
else if (e.Cancelled)
{
_logger.Warn(string.Format("Cancelled email to {0} with subject [{1}].", mail.To, mail.Subject));
}
else
{
_logger.Info(string.Format("Sent email to {0} with subject [{1}].", mail.To, mail.Subject));
}
}
क्यों async ईमेल रद्द किया जा रहा हैं, लेकिन तुल्यकालिक ईमेल ठीक माध्यम से जाना? क्या यह एक निपटान मुद्दा हो सकता है?
बहुत खूब! मैं उपयोग (...) कथन और async भेज रहा है अब पूरी तरह से काम करता है। धन्यवाद, एंडर्स! –
क्या यह संभव है कि एसिंक भेजने से पहले नियंत्रक को _logger के साथ निपटान किया जाएगा, जिसके परिणामस्वरूप ILogger इंस्टेंस पर एक शून्य संदर्भ अपवाद हो सकता है? –
अधिक सटीक ... "जब आप क्लाइंट का निपटान करते हैं तो यह किसी भी उत्कृष्ट एसिंक ऑपरेशंस को रद्द कर देता है।" = जब आप SmtpClient का निपटान करते हैं तो यह वर्ग के उदाहरण के लिए किसी भी उत्कृष्ट एसिंक ऑपरेशंस को रद्द करता है। –