有时,我的ASP.NET网站必须调用外部服务,在FTP / SFTP上下载或上传小文件或执行其他可能需要时间的任务。在连接超时的最坏情况下,它甚至可以达到30秒。
现在,我的asp.net网站在单个AppPool上运行,因此,如果对外部服务的请求需要5秒钟,那么这段时间(整个用户)我的整个AppPoll都会冻结。
那是因为99%的时间请求时间都非常快,所以我不在乎用户是否必须等待0.5秒才能加载页面。但是我不满意其他所有用户也必须等待那0.5秒。
我问了一位朋友和同事,他们说我必须为每项长期任务创造一份“工作”。将我的作业请求放入共享数据库中,让外部程序(守护程序,服务等)处理该作业,将结果写入数据库,并让用户池(或longpool)页面知道其请求何时完成。 / p>
对于简单的非CPU密集型任务而言,这看起来像是一个过分的杀伤力。是否有一种方法可以发出非AppPool阻止的请求(或不涉及会话状态的请求,我也接受)?