从服务器

时间:2015-09-01 07:46:47

标签: c# asp.net web

目前我正在开展一个项目,在该项目中,网页将通过使用Web服务开始3小时的数据传输过程。基本上,Id列表用于告诉Web服务将数据对象从一个数据库传输到另一个数据库。

当我开始这个过程时,我想让用户保持控制。他必须能够看到当前进程有多远,并且能够按下取消按钮来停止数据传输。所有这些都是从ASPX网页上运行的。

我发现尝试异步运行进程不允许我像我希望的那样更新用户界面。只有当整个过程完成时我可能面临的另一个问题是,由于该过程需要花费大量时间,因此服务器对象可能会在某些时候刷新,这可能会导致我失去进度。

我目前正处于决定是否使用Web服务器处理数据传输的程度。如果是,我目前的解决方案是使用任务异步运行进程,并使用客户端Web调用(到aspx页面)来更新客户端界面。我还为我的工作对象实现了IRegisteredObject接口。 IRegisteredObject explanation

欢迎任何关于如何最好地解决这个问题的想法。我真的想知道我是否朝着正确的方向前进。

2 个答案:

答案 0 :(得分:1)

我建议您创建一个WCF服务,该服务不在ASP.NET中托管,并使您的ASP.NET应用程序调用该服务来触发执行数据传输的长时间运行的作业。同时,您的ASP.NET应用程序通知用户它已触发作业,您可以在服务上公开ASP.NET应用程序可以通过用户请求查询的其他端点,以便提取和报告进度。

答案 1 :(得分:1)

Web服务器每次只为每个用户运行一个页面,因此如果您希望在进程运行时与浏览器通信,则无法从请求中运行进度。您需要将其作为独立的后台线程启动,以便您可以完成启动该过程的请求。

之后,您可以向服务器发送请求,以便轮询流程状态或控制流程。

如果可能,您应该完全在IIS之外运行该过程,例如作为控制台应用程序。这样,您只需跟踪Web应用程序中正在运行的进程这一事实,例如将其放入数据库中,以便它能够在IIS回收中幸存下来。