asp.net - 从 BackgroundWorker 进程获取 HttpContext

标签 asp.net session backgroundworker

我有一个 ASP.NET 站点,我一直在做一些重构代码的工作,以尝试通过创建 BackgroundWorker 并将工作发送到该站点,从实际的 http 请求中删除一些长时间运行的进程(大约一个小时)过程。这在缩减测试中运行良好,但是当我将逻辑应用于实际代码时,我发现从后台工作器中运行的代码访问 session 变量时出现问题。似乎传递的 HttpContext 对象有一个空 session ,如果我要求 HttpContext.Current 我得到空返回。

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

感谢您的任何想法。除了 BackgroundWorker 进程(在另一个问题中向我建议的)之外,我愿意接受其他关于如何执行此操作的建议。

最佳答案

我不确定您的所有要求,但是如果您不希望与单个用户的请求相关联的漫长过程,您可以使用应用程序缓存而不是 session 。

如果是这样,我会尝试将您对 Session 的使用换成:

HttpRuntime.Cache.Set("CacheKeyName");
HttpRuntime.Cache.Get("CacheKeyName");

关于asp.net - 从 BackgroundWorker 进程获取 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3523547/

相关文章:

android - 异步任务 : Is onPostExecute guaranteed to run after all calls to onProgressUpdate?

javascript - 在不知道加密方法的情况下通过给定的密码和盐对用户进行身份验证

c# - 使用 MVC3 和 EF4 CTP5w 进行 JSON 序列化的循环引用异常

session - Node.js 和 Express session 处理 - 后退按钮问题

c# - 包含实现 IDisposable 的项目的 session

c# - try catch UI 线程的调用

Javascript 作用域与 asp.net

javascript将文本拆分为单词列表,然后动态添加到div,表单标签搞砸了

ruby-on-rails-3 - 存储在数据库中的 Rails session

c# - 如何在Windows窗体C#中实现进度条?