【问题标题】:updating aspx page from server从服务器更新 aspx 页面
【发布时间】:2015-09-01 16:03:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不,您不会在 ASP.NET 中执行长时间运行的后台任务,原因是您找到的以及许多其他原因。您使用类似于 Windows 服务的东西,例如用于 IPC 的 WCF 来报告进度或取消操作。 stackoverflow.com/questions/28109449/…,

标签: c# asp.net web


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Web 服务器一次只会为每个用户运行一个页面,因此如果您想在进程运行时与浏览器通信,则无法从请求中运行进度。你需要把它作为一个独立的后台线程来启动,这样你才能完成启动进程的请求。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多