2010-05-12 82 views
3

我有了一个长期运行的(资源密集型)的过程中后面的代码,并最终输出为PDF文件(图片为PDF转换工具)长期运行的进程

它的Web应用程序运行良好..因为我在专用服务器上,所以现在对于资源来说完全没有问题。

但是,如果每次处理的用户超过20人,我不知道系统会达到其资源限制。

我在网上看到了用户输入他们的电子邮件的服务,我想这些进程在后台排队,并且结果通过第一个输出方法通过电子邮件发送。

有人能给我一个关于如何在使用C#的asp.net应用程序中实现这种逻辑的开始吗?

回答

5

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

0

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

  1. 将请求记录到队列中,可以是数据库表或MSMQ。如果程序出现问题,您需要将其记录到某个队列中。由于您要异步处理这些进程,因此用户永远不会知道是否出现问题,除此之外从不接收文件。这样,如果发生什么情况并继续处理,您可以重新启动进程。
  2. 让外部应用程序一次监视一个队列并处理一个请求。
  3. 当过程完成后,通知用户该过程已完成,并且可以在网站上下载,或者只需将PDF发送给用户。

有关外部程序处理转换的重要部分是,您可以在多台机器上加载程序以更快地处理请求,而且它不必减慢使用的Web /应用程序服务器的速度处理网站。

+0

谢谢您的回复。 如果我理解错了,请原谅我。 1.因此,我创建了一个win服务,可以将输入的图像位置和电子邮件地址作为输入,并输出pdf文件的位置。 2.当从Web界面提交请求时,我会将图像位置和电子邮件地址记录到数据库中。并可以说一个专栏说完或不。 我不明白如何做你的第二点。 你如何有Windows服务来监视数据库? 你能带我到教程或给我一个片段? 非常感谢, Prasad。 – pessi 2010-05-12 13:47:21

0

正如克劳斯正确地指出,我们已经使用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作为附件到用户

希望这答案!!!!。祝你今天愉快!!!

相关问题