1

我有一个调用 dll 的 asp.net 页面,该 dll 将启动一个更新产品信息的漫长过程。随着流程的运行,我想向用户提供有关该流程所在的产品以及产品状态的持续更新。我一直无法让这个工作。我将信息添加到日志文本文件中,我想我会重定向到一个新页面,并让该页面每隔几秒钟使用 Javascript 从文本文件中读取一次。我的问题是有没有其他人尝试过这个并且它工作得相当好?

4

3 回答 3

2

我会使用 Ajax 并轮询该文本文件以获取更新。

于 2010-03-07T18:26:42.800 回答
0
  • 进行漫长的过程,以便更新有关进度的某些状态 - 状态、最后处理的产品等。
  • 一旦开始,您可能希望仅在处理的每 50 个项目上更新进度,以在 ASP.NET 端节省资源(您可能不会,这取决于您想要什么)。
  • 如果处理与当前会话相关联,您可能希望将状态放入会话中。如果它不是 - 例如全局 - 将其置于某个全局状态。
  • 然后通过 Ajax 从 javascript 中轮询状态一次,例如使用 JSON 并相应地更新 UI。
  • 确保在访问共享状态时使用正确的锁定。
  • 此外,尽量保持较小的状态(仅存储获取 js gui 数据所绝对需要的内容)。
于 2010-03-07T18:47:50.330 回答
0

您可以将状态输出到数据库表,而不是将状态输出到基于文本的日志文件(或者,除了使用日志文件;您可以同时使用两者)。例如,按如下方式构建表:

Queue:
  id (Primary Key)
  user_id (Foreign Key)
  product_id (Foreign Key) //if available
  batch_size //total set of products in the batch this message was generated from
  batch_remaining //number remaining in this batch
  message

所以现在你有一个队列。现在,当用户进入特定页面时,您可以执行以下两项操作之一:

  1. 从队列中获取一些相关数据并显示在标题中。每次刷新页面时都会更新。
  2. 创建一个 AJAX 处理程序,它将轮询 Web 服务以每隔一段时间获取数据。这样,您可以每 15 或 20 秒更新一次状态,即使用户在同一页面上而无需刷新。

您可以在发送后从队列中删除行,或者如果您想保留该数据,请添加另一个名为的列sent并将其设置为true一旦用户看到该数据。

于 2010-03-07T18:48:45.423 回答