2016-05-09 34 views
0

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

你使用smtpClient? –

+0

我使用WebClient,但这不是问题 - 如果我删除重定向一切工作正常。我曾经显示一个启动画面,让用户重定向自己,但不再可能。 –

+0

我在说使用smtpClient发送邮件? –

回答

2

也许
尝试实施异步任务方法sendAsync并等待 这AWAIT将帮助您等待需要多少跳之前发送电子邮件至重定向

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

感谢您的答复 - 不幸的是,该网站目前正在运行ASP。净4,所以我不能使用异步 –

+0

http://stackoverflow.com/questions/13266277/how-do-i-call-async-methods-in-asp-net-c-sharp-4-0 –

+0

看这里你仍然能够以不同的方式达到目标 –

1

你应该改写你的初始化,使它看起来像这样:

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

smtpClient_SendCompleted功能编写代码重定向

相关问题