长期运行的进程
我有了一个长期运行的(资源密集型)的过程中后面的代码,并最终输出为PDF文件(图片为PDF转换工具)长期运行的进程
它的Web应用程序运行良好..因为我在专用服务器上,所以现在对于资源来说完全没有问题。
但是,如果每次处理的用户超过20人,我不知道系统会达到其资源限制。
我在网上看到了用户输入他们的电子邮件的服务,我想这些进程在后台排队,并且结果通过第一个输出方法通过电子邮件发送。
有人能给我一个关于如何在使用C#的asp.net应用程序中实现这种逻辑的开始吗?
这样的系统将包含在服务器上运行的Windows服务。 asp.net页面唯一做的就是向数据库提交一个请求(包含相关数据)。然后,Windows服务监控该表并处理所有新请求。
您想限制并发请求的数量。您可以创建一个单独的应用程序来处理转换过程。 Windows服务或定期运行的计划任务。
- 将请求记录到队列中,可以是数据库表或MSMQ。如果程序出现问题,您需要将其记录到某个队列中。由于您要异步处理这些进程,因此用户永远不会知道是否出现问题,除此之外从不接收文件。这样,如果发生什么情况并继续处理,您可以重新启动进程。
- 让外部应用程序一次监视一个队列并处理一个请求。
- 当过程完成后,通知用户该过程已完成,并且可以在网站上下载,或者只需将PDF发送给用户。
有关外部程序处理转换的重要部分是,您可以在多台机器上加载程序以更快地处理请求,而且它不必减慢使用的Web /应用程序服务器的速度处理网站。
正如克劳斯正确地指出,我们已经使用Windows服务
补遗他的回答来实现它:
(I)拆分长时间运行的过程分解成多个任务
(二)对于每一个任务,创建单独的控制台应用程序&使用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作为附件到用户
希望这答案!!!!。祝你今天愉快!!!
谢谢您的回复。 如果我理解错了,请原谅我。 1.因此,我创建了一个win服务,可以将输入的图像位置和电子邮件地址作为输入,并输出pdf文件的位置。 2.当从Web界面提交请求时,我会将图像位置和电子邮件地址记录到数据库中。并可以说一个专栏说完或不。 我不明白如何做你的第二点。 你如何有Windows服务来监视数据库? 你能带我到教程或给我一个片段? 非常感谢, Prasad。 – pessi 2010-05-12 13:47:21