加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – SmtpClient.SendAsync调用自动取消

发布时间:2020-12-16 04:37:25 所属栏目:asp.Net 来源:网络整理
导读:每当我从ASP.NET MVC应用程序中调用smtpClient.SendAsync(…)时,即使从未调用SendAsyncCancel(),也会自动取消异步请求. 另一方面,同步.发送(…)请求通过就好了. 我的EmailService服务包装器处理从我的ASP.NET MVC 3应用程序中发送带有SmtpClient的异步电子邮
每当我从ASP.NET MVC应用程序中调用smtpClient.SendAsync(…)时,即使从未调用SendAsyncCancel(),也会自动取消异步请求.

另一方面,同步.发送(…)请求通过就好了.

我的EmailService服务包装器处理从我的ASP.NET MVC 3应用程序中发送带有SmtpClient的异步电子邮件.通过StructureMap将服务实例注入到每个MVC控制器中,它将新的SmtpClient实例包装在using(…){}语句中.

这是我的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.Subject));
    }
    else
    {
        _logger.Info(string.Format("Sent email to {0} with subject [{1}].",mail.Subject));
    }
}

为什么异步电子邮件被取消,但同步电子邮件通过正常?这可能是处理问题吗?

解决方法

它肯定是一个处置问题.当您处置客户端时,它会取消任何未完成的异步操作.

您应该在Email_OnCompleted中处置客户端.

关于在哪里处置的SO帖子:Dispose SmtpClient in SendComplete?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读