繁体   English   中英

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

[英]long running process in asp.net C#

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

它运行良好..而且由于我在专用服务器上,所以现在资源方面根本不是问题。

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

我在网上看到过用户输入电子邮件的服务,我想这些进程在后台排队,结果通过 1st in 1st out 方法通过电子邮件发送。

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

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

正如克劳斯正确指出的那样,我们必须使用 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 task scheduler 中调度所有应用程序或使用活动批处理服务器(商业)
(vii) 最后一个应用程序“电子邮件”向用户发送一封带有生成的 pdf 作为附件的电子邮件

希望这能回答!!!! 祝你今天过得愉快!!!

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM