.net 从web应用程序运行的控制台应用程序使用哪些进程

.net 从web应用程序运行的控制台应用程序使用哪些进程,.net,performance,web-applications,process,console-application,.net,Performance,Web Applications,Process,Console Application,在web应用程序中,当本地文件上载到服务器时,我需要执行文件转换(例如从jpeg到pdf) 我决定将此任务委托给控制台应用程序,以便将其与常规web应用程序分离。控制台应用程序代码在用户每次上载本地文档时运行,并在成功的情况下返回转换文件的名称(test.jpg作为输入将返回test.pdf) 由于我需要在继续之前知道文件是否正确转换,我是否失去了将任务委托给外部进程的好处(因为console应用程序的代码将在单独的进程上运行,对不对) 由于上传的文件仅转换为pdf或.doc,因此我可以相应地更

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

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

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

下面是我设计用来调用console应用程序的代码:

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);

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

通常,最好不要在web请求的上下文中执行长时间运行的任务;文件转换可能就是这样一项“长期运行”的任务。同步运行转换是问题所在,不一定是在代码隐藏、shell应用程序或web服务中运行代码

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


正确的解决方法是使用。只要您异步处理转换,我认为具体实现是什么并不重要——您就不太可能遇到可伸缩性问题。为了获得额外的好处,如果必须,您可以通过将任务委托给单独的服务来使用分布式处理

好的提示+1。最初我的想法是使用异步解决方案,让控制台应用程序运行。但是,我需要知道转换是否失败,以便继续工作流程。我将尝试将原始fle重命名为目标扩展名(pdf),然后在使用它之前检查文件是否存在。但是问题是,我可以在从控制台应用程序正确生成文件之前请求该文件,这会导致该文件因不可用而失败。。。