代码之家  ›  专栏  ›  技术社区  ›  Chris

从BackgroundWorker进程获取HttpContext

  •  4
  • Chris  · 技术社区  · 14 年前

    我有一个ASP.NETsite和我一直在做一些重构代码的工作,试图通过创建BackgroundWorker并将工作发送给那个进程,从实际的http请求中删除一些长时间运行的进程(大约一个小时)。这在缩减测试中运行得很好,但是当我将逻辑应用到实际代码时,我发现从后台工作程序中运行的代码访问会话变量时出现了问题。似乎传递的HttpContext对象有一个空会话,如果我请求HttpContext.当前我回来了。

    我假设这是因为它们在不同的线程中,会话和HttpContext.当前两者都依赖于处于同一线程中。有没有什么方法可以让我从后台工作人员访问会话,或者我只能从会话中找到所有需要的变量,并将它们放入可用的数据结构中,然后再将它们放回会话(如果合适的话)?如果我需要这样做的话,显然会使重构复杂化,所以我宁愿不这样做。

    谢谢你的任何想法。除了后台工作流程(这是在另一个问题中向我提出的)之外,我愿意接受其他关于如何做到这一点的建议。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jemes    14 年前

    我不确定您的所有需求,但是如果您不希望将长过程绑定到单个用户的请求,那么您可以使用应用程序缓存而不是会话。

    HttpRuntime.Cache.Set("CacheKeyName");
    HttpRuntime.Cache.Get("CacheKeyName");
    
        2
  •  1
  •   Saharsh    10 年前

    Here 具体内容如下:

    ,应用程序在访问AsyncManager类的成员(如参数)时可能会遇到竞争条件。以确保您可以访问HttpContext.当前为了避免竞争状况, 你可以恢复HttpContext.当前通过从回调方法调用Sync() .