asp.net中长时间运行的进程#

时间:2010-05-12 13:14:26

标签: c# asp.net process long-integer

我有一个Web应用程序,在后面的代码中有一个长时间运行(资源密集型)进程,最终输出是一个pdf文件(图像到pdf转换工具)

它运行正常......因为我在专用服务器上,所以现在资源完全不存在问题。

但是,我想知道如果一次处理的用户超过20个,系统将达到其资源限制。

我已经在网上看到了用户输入电子邮件的服务,我想这些流程在后台排队,结果以先进先出法的方式通过电子邮件发送。

有人可以开始介绍如何使用C#在asp.net应用程序中实现这种逻辑吗?

4 个答案:

答案 0 :(得分:5)

这样的系统将包含在服务器上运行的Windows服务。 asp.net页面唯一做的就是向数据库提交请求(带有相关数据)。然后,Windows服务监视此表并处理所有新请求。

答案 1 :(得分:0)

您希望限制并发请求的数量。您可以创建单独的应用程序来处理转换过程。 Windows服务或定期运行的计划任务。

  1. 将请求记录到队列中,或者记录到数据库表或MSMQ。如果程序出现问题,您需要将其记录到某个队列中。由于您要异步处理这些进程,因此除了从未接收过该文件之外,用户永远不会知道是否出现了问题。这样,如果发生某些事情,您可以重新启动该过程并继续处理。
  2. 让外部应用程序监视队列并一次处理一个请求。
  3. 当流程完成后,通知用户流程已完成,可以在网站上下载,或者只是将pdf通过电子邮件发送给用户。
  4. 让外部程序处理转换的好处在于,您可以在多台计算机上加载程序以更快地处理请求,并且它/它们不必减慢用于处理请求的Web / app服务器的速度网站。

答案 2 :(得分:0)

正如Klaus正确指出的那样,我们使用Windows服务实现它 他回答的附录:
(i)将长期运行的过程分成多个任务
(ii)对于每项任务,创建一个单独的控制台应用程序&使用applicationId识别每个应用程序。

enum ApplicationId:byte
{
  Router = 1,
  Task1 =  2,
  Task2 =  3,
  Task3 =  4,
  Task4 =  5,
  Email = 6
}

(iii)将一个应用程序称为路由器。它会将交易从一个应用程序移动到另一个应用程序 (iv)现在创建一个包含transactionId,nextAppId和任何其他相关字段的表 (v)完成任务后,更新表
中的nextAppId (vi)安排Windows任务调度程序中的所有应用程序或使用活动批处理服务器(商业)
(vii)最后一个申请'电子邮件'发送带有生成的pdf的电子邮件作为附件给用户

希望这个答案!!!!祝你有愉快的一天!

答案 3 :(得分:0)

您需要一些工作人员在后台处理您的任务并发送结果。由于@Klaus的回答,我建议使用Hangfire。我们将其用于在ASP应用程序内部创建后台作业并执行长时间运行的过程(例如:图像处理请求)。