2010-02-12 53 views
1

在asp.net中运行一个漫长过程(如2小时)的最成功方法是什么,并在进度上向客户端返回信息。从ASP.NET运行一个漫长过程的方法页面

我听说创建一个Windows服务,httphandler和远程处理可以成功。

+0

请问这样一个漫长过程的目的是什么?有一个更好的方法来做到这一点比从一个asp.net页面。 – Aaron 2010-02-12 17:04:11

回答

1

只是一个建议...

如果你有,你是tyring在asp.net已经利用逻辑...你可以做一个外部应用程序(Windows服务,控制台应用程序等)调用您的asp.net页面上的Web服务。

例如,我有一个类似的问题,我需要的代码是asp.net,我需要使用此代码更新大约3000个客户端。它开始超时,所以我通过Web服务暴露了代码。然后,我不是一次尝试通过asp.net运行整个3000个客户端,而是使用一个控制台应用程序,该应用程序由每个客户端运行一次Web服务的夜间SQL Server作业运行。通过这种方式,所有耗时的处理都由控制台应用程序处理,但没有超时问题,但我们已经在asp.net中编写的代码无需重新创建。最后略微修改我现有架构的设计使我能够轻松解决这个问题。

这真的取决于你必须处理的环境和约束......希望这有助于。

0

这不是直接适用的,但我编写了代码,可以让您在不需要使用Windows服务或任何类型的cron作业的情况下运行类似于ASP.NET中“计划任务”的进程。

Scheduled Tasks in ASP.NET!

+2

这是否考虑到了asp.net的回收? – user204588 2010-02-12 18:23:07

1

有迹象表明,我已经处理了这个方法有两种。首先,您可以简单地运行流程并让客户端超时。这有两个缺点:用户界面不同步,你正在绑定一个用于非HTML目的的IIS线程(我为一个过程足够快地返回,但超出了超时限制)。

处理此问题的更好方法是编写一个“Service”应用程序,用于处理通过数据库表传递的请求(将请求的详细信息放在那里)。然后,您可以创建一个窗口,为用户提供正在进行的任务的“窗口”(例如处理了多少记录或发送了电子邮件)。此状态窗口可以有一个链接,允许用户刷新,或者您可以使用计时器上的Ajax回调自动执行刷新。

0

我非常喜欢WCF服务的计划任务。您可能(不在我的头顶)将一个addr传递给WCF服务,作为一种“回调”,服务可以在进程报告中调用它。

我会回避计划的任务...过于粗糙。