如何在重定向之前完成请求

时间:2016-05-09 11:42:01

标签: c# asp.net response.redirect

使用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();
            }
        }

2 个答案:

答案 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函数写下你的重定向代码