使用C#/ Asp.Net
我有一个应用程序可以访问Web服务。返回时会发生以下几件事情:
void Cleanup(Response response)
{
// My web service takes up to 30 seconds
// then this method is called
// I send this email
var email = SaleEmail.Create(
response.ID
DateTime.Now,
"A sale was made!");
email.Send();
// Then redirect
Response.Redirect(response.RedirectUrl, false);
Context.ApplicationInstance.CompleteRequest();
}
这个想法是,在完成Web服务后发送一封电子邮件,然后重定向该页面。
以前,我使用了正常的重定向 - 结果是90%的电子邮件从未发送过。
我已经改变了重定向模式,但它仍然不完美 - 我猜测25%的电子邮件仍未通过。
有人建议对我的模式进行任何改进吗?
电子邮件代码:
public static void Send(MailMessage message)
{
Guard.Argument.NotNull(() => message);
var c = new SmtpClient();
try
{
c.Send(message);
}
catch (Exception ex)
{
}
finally
{
c.Dispose();
message.Dispose();
}
}
答案 0 :(得分:2)
也许是 尝试使用 sendAsync并等待实施异步任务方法 此等待将帮助您等待在跳转到重定向之前发送电子邮件所需的数量
//async Task
public async Task Cleanup(Response response)
{
using (var smtpClient = new SmtpClient())
{
await smtpClient.SendAsync();...//await
}
}
答案 1 :(得分:0)
你应该以某种方式重写你的初始化,使它看起来像这样:
smtpClient.SendAsync();
smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
on smtpClient_SendCompleted
函数写下你的重定向代码