会话变量是否在长时间处理之前被创建和访问

时间:2011-05-29 17:39:37

标签: c# jquery session-variables setinterval

我有一个页面执行一个很长的过程,从几个csv文件解析超过600万行到我的数据库。

问题就像当用户点击“GO”开始处理并解析600万行时,我想设置一个会话变量,该变量可立即用于我的网站应用程序的其余部分,以便该网站的任何用户知道具有唯一ID号的用户已经开始解析文件而不必等到处理了600万行的末尾?

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

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

我正在使用.NET 4.0 Entity Framework 4.0,jQuery和MS SQL 2008 R2开发C#。

我正在考虑使用会话变量然而在我的静态[WebMethod]中我的jQuery JSON调用我无法撤回我的会话,除非我使用HttpContext.Current.Session但我不知道如果这个解决方案会工作吗?

任何指导或想法都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:0)

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

如果您愿意,可以使用静态类。

例如

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

并提供进度报告。你可以使用asp:Timer来检查每两秒钟的进度百分比。

这是我为asp编写的示例代码:UpdatePanel中的Timer: Writing a code trigger for the updatepanel.

我建议您使用Guid将当前进度识别为状态包的关键。

答案 1 :(得分:0)

这样做的正确方法是通过服务,例如WCF服务。您不希望在Web服务器上施加巨大的负载,这不应该这样做。

通常情况:

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

P.S。这不是你问题的直接答案,但我希望它有所帮助