正在创建会话变量并在长进程之前访问

本文关键字:访问 长进程 变量 创建 会话 | 更新日期: 2023-09-27 17:57:52

我有一个页面,它执行一个漫长的过程,将几个csv文件中的600多万行解析到我的数据库中。

问题是,当用户单击"GO"开始处理和解析600万行时,我想设置一个会话变量,该变量可立即用于我的网站应用程序的其他部分,以便网站的任何用户都知道具有唯一ID号的用户已开始解析文件,而无需等到处理的600万行结束?

还有jQuery和JSON,我想在网页上获得关于正在处理哪个csv文件以及已经处理了多少行的反馈。

可能会有其他人同时解析文件,即使网站上没有登录或用户身份验证,我如何跟踪所有这些并停止与其他用户的任何混淆等?

我正在用C#开发.NET 4.0实体框架4.0、jQuery和MS SQL 2008 R2。

我曾考虑使用会话变量,但在我的静态[WebMethod]中,我的jQuery JSON调用无法撤回会话,除非我使用HttpContext.Current.Session,但我不确定这个解决方案是否可行?

任何指导或想法都将不胜感激。

感谢

正在创建会话变量并在长进程之前访问

首先:会话变量不应该在任何地方都能被任何用户看到。当某个客户端连接到服务器时,服务器会为它们创建一个会话,下次同一用户请求时(在会话到期时间内),会话(及其变量)是可用的。

如果你想的话,你可以使用一个静态类

例如

public static class MyApplicationStateBag
{
    public static Dictionary<string,object> Objects {get; private set;}
}

以及您的进度报告。您可以使用asp:Timer每隔一两秒钟检查一次进度百分比。

以下是我为UpdatePanel中的asp:Timer编写的示例代码:为updatepanel编写代码触发器。

我建议您使用Guid来识别当前进度,将其作为状态包的密钥。

正确的方法是通过服务,例如WCF服务。你不想给网络服务器带来巨大的负载,而这是不应该的。

通常情况:

  • 用户点击GO按钮
  • Web服务器创建作业并在单独的WCF服务上启动此作业
  • 每个作业都有ID和元数据(状态、开始时间等),这些元数据将持久保存到存储中
  • Web服务器向用户返回带有作业ID的响应
  • 用户通过AJAX(JQuery)查询存储中的作业,一旦完成就可以检索结果
  • 您也可以将作业ID保存到会话

附言:这不是你问题的直接答案,但我希望它能帮助