从asp.net运行控制台应用程序的后台任务

时间:2015-07-09 07:44:07

标签: asp.net web-applications .net-3.5 background-task

我的要求是从外部服务器发送Web应用程序中的电子邮件,平均需要大约4到5秒来处理和发送确认电子邮件。我不希望用户等待这个,所以我用Process()触发一个控制台应用程序.StartInfo.Start()它在后台执行。问题是我可以依赖多少,因为在正常的日子里,应用程序每天发送大约1万封电子邮件,在高流量的日子里,它可能会超过8万封。应用程序或服务器可能遇到哪些问题?有没有更好的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法来实现此目的:

  1. 创建.aspx页面并在此处为您编写业务代码(例如电子邮件 发送)

  2. 如果需要,请使用Javascript以及querystring中的参数调用此页面。您可以创建一个图像元素并将其源设置为该页面。

    var img = new Image();
    img.scr = "perform-operation.aspx?[parametervalues]";
    
  3. 谢谢

答案 1 :(得分:0)

控制台应用程序有缺点,如果你计划分别为每个电子邮件调用控制台应用程序,任何新进程都需要很长时间来加载和清理,这对cpu来说是太多的开销。相反,最好的选择是在IIS中托管另一个网站,这个新网站将拥有自己的应用程序池,它将创建和托管进程。如果没有提供请求,IIS将关闭该进程。您可以通过为每个应用程序运行更多工作进程来设置Web Farm。

其他替代方法是始终运行控制台或Windows服务,让它在内存中,但有一个Web服务主机监听电子邮件请求,如果从您的Web应用程序收到请求,此后台服务将发送电子邮件新线程并返回等待状态。基本上它是一个自托管的WCF服务。这与在IIS上托管另一个网站完全相同。

我更喜欢基于IIS的托管,因为它易于设置,不需要任何额外的权限,并且将来,为了横向扩展,您可以轻松地将此邮件服务移动到其他服务器。