1

您在 asp.net 中运行长流程(例如 2 小时)并将进度信息返回给客户端的最成功方法是什么。

听说创建windows服务,httphandler和remoting都可以成功。

4

4 回答 4

1

只是一个建议...

如果您已经在 asp.net 中想要使用逻辑......您可以制作一个外部应用程序(Windows 服务、控制台应用程序等),在您的 asp.net 页面上调用 Web 服务。

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

这真的取决于你必须处理的环境和限制......希望这会有所帮助。

于 2010-02-12T17:10:57.107 回答
1

我有两种处理方法。首先,您可以简单地运行该进程并让客户端超时。这有两个缺点:UI 不同步,并且您将 IIS 线程用于非 html 目的(我这样做是为了一个过去足够快但超出超时限制的进程)。

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

于 2010-02-12T17:34:01.613 回答
0

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

ASP.NET 中的计划任务!

于 2010-02-12T17:22:00.967 回答
0

我非常喜欢 WCF 服务而不是计划任务。您可能(在我的脑海中)将 addr 作为一种“回调”传递给 WCF 服务,该服务可以在工作时使用进度报告调用该服务。

我会回避预定的任务……太粗糙了。

于 2010-02-12T17:34:42.247 回答