从Web应用程序运行的控制台应用程序使用哪些进程

时间:2012-03-07 13:59:13

标签: .net performance web-applications process console-application

在Web应用程序中,当本地文件上传到服务器时,我需要执行文件转换(例如从jpeg到pdf)。
我决定将此任务委派给控制台应用程序,以便将其与常规Web应用程序分离。每次用户上传本地文档时都会运行控制台应用程序代码,并在成功时返回已转换文件的名称(test.jpg作为输入将返回test.pdf)。

由于我需要知道文件是否在继续之前已正确转换,我失去了将任务委派给外部进程的好处(因为控制台应用程序的代码将单独运行过程,对吧)?

由于上传的文件只转换为pdf或.doc,我可以相应地更改表示文件名的字符串,然后在以下步骤中最终检查该文件是否存在,但是我想要破解所有操作,如果转换失败,而不是产生任何中间结果,应该被丢弃。

这里是我设计用于调用控制台应用程序的代码:

HttpPostedFile file = HttpContext.Current.Request.Files[0];
FileInfo fileInfo = new FileInfo(file.FileName);
string extension = fileInfo.Extension;
ConvertCommand conv = new ConvertCommand();
string convertedFile = conv.Run(file.InputStream, extension, targetFilePath);

2 个答案:

答案 0 :(得分:1)

通常不要在Web请求的上下文中执行长时间运行的任务;文件转换可能是一个“长期运行”的任务。同步运行转换是一个问题,不一定是您在代码后面运行代码,shell应用程序还是Web服务。

工作线程是Web服务器上的稀缺资源(相对而言);大多数Web服务器都希望在一秒左右的时间内处理Web请求。如果请求需要更长时间,则服务器需要管理更多工作线程;这反过来可能会减慢每个单独线程的处理速度,这意味着它们需要更长时间,并且整个事情可以非常快速地变为非线性。

正确的解决方案是使用asynchronous processing。只要您异步处理转换,我认为具体实现并不重要 - 您不太可能遇到可伸缩性问题。如果您需要将任务委派给单独的服务,则可以使用分布式处理来获得额外的奖励。

答案 1 :(得分:0)

我建议使用Windows服务进行图像转换,而不是控制台应用程序。与它的通信可以通过WCF完成。