我有一个Web应用程序,在后面的代码中有一个长时间运行(资源密集型)进程,最终输出是一个pdf文件(图像到pdf转换工具)
它运行正常......因为我在专用服务器上,所以现在资源完全不存在问题。
但是,我想知道如果一次处理的用户超过20个,系统将达到其资源限制。
我已经在网上看到了用户输入电子邮件的服务,我想这些流程在后台排队,结果以先进先出法的方式通过电子邮件发送。
有人可以开始介绍如何使用C#在asp.net应用程序中实现这种逻辑吗?
答案 0 :(得分:5)
这样的系统将包含在服务器上运行的Windows服务。 asp.net页面唯一做的就是向数据库提交请求(带有相关数据)。然后,Windows服务监视此表并处理所有新请求。
答案 1 :(得分:0)
您希望限制并发请求的数量。您可以创建单独的应用程序来处理转换过程。 Windows服务或定期运行的计划任务。
让外部程序处理转换的好处在于,您可以在多台计算机上加载程序以更快地处理请求,并且它/它们不必减慢用于处理请求的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应用程序内部创建后台作业并执行长时间运行的过程(例如:图像处理请求)。