【问题标题】:How to complete request before redirecting如何在重定向之前完成请求
【发布时间】:2016-05-09 11:42:01
【问题描述】:

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

这个想法是,在网络服务完成后,会发送一封电子邮件,然后重定向页面。

以前,我使用普通重定向 - 结果是 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();
            }
        }

【问题讨论】:

  • 你用过smtpClient吗?
  • 我正在使用 WebClient 但这不是问题 - 如果我删除重定向一切正常。我曾经显示一个启动屏幕并让用户重定向自己,但这不再可能。
  • 我说的是使用 smtpClient 发送邮件?
  • email.Send();会发生什么
  • @PranavPatel - 对不起,误解了 - 电子邮件代码现在发布在上面

标签: c# asp.net response.redirect


【解决方案1】:

也许
尝试使用 sendAsync 和 await 实现 异步任务方法 这个等待将帮助您在跳转到重定向之前等待发送电子邮件所需的时间

//async Task
public async Task Cleanup(Response response)
{
     using (var smtpClient = new SmtpClient())
    {
        await smtpClient.SendAsync();...//await
    }
}

【讨论】:

  • 感谢您的回复 - 不幸的是,该站点当前正在运行 ASP.Net 4,因此我无法使用异步
  • 看这里你仍然可以到达那个等待,但只是以不同的方式
【解决方案2】:

你应该以某种方式重写你的初始化,让它看起来像这样:

smtpClient.SendAsync();
smtpClient.SendCompleted  += new SendCompletedEventHandler(smtpClient_SendCompleted);

smtpClient_SendCompleted函数上写下你的重定向代码

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 2012-12-13
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多