快速提问:是否存在“每用户”数据存储对象(类似于Session
),我可以将数据存储在全局范围内(类似于HttpRuntime.Cache
)?几乎好像Session
和HttpRuntime.Cache
有一个孩子。
完整背景:我有一个最初为单个线程编写的ASP.NET网站。现在我对其进行了更改,以便某些操作将生成后台线程,浏览器会轮询服务以获取状态更新。
我遇到的问题是某些数据存储在HttpContext.Session []对象中(例如,成员身份验证令牌)。这些数据需要对每个用户都是唯一的,并且可供后台线程访问。会话不适用于后台线程。
我知道HttpRuntime.Cache
但是这需要微观管理来分割用户并在会话过期的同时使其过期。另一方面,Session
会在我想要的时间自动使这些内容过期,并且已被SqlMembershipProvider
等内容使用。
我的问题是,是否存在与Session类似但存在于全局范围内的东西?
答案 0 :(得分:3)
我认为你不需要开箱即用。我会做以下事情:
Dictionary
或某个对象列表。用它来存储您需要的所有数据。答案 1 :(得分:3)
尝试将HttpContext.Current
对象传递给后台线程上的方法。您应该能够通过currentContext.Session
从后台线程访问会话,假设currentContext
是传入的HttpContext
参数。
请参阅此blog post,了解如何从多个线程安全地访问HttpContext对象。
答案 2 :(得分:3)
没有
因为当应用程序池重新启动所有后台活动时,我建议考虑将用户的状态移动到您自己的数据库或外部存储。遗憾的是,您将失去自动会话管理功能(滑动到期),但如果您需要后台活动,它将更好地工作 - 即,如果稍后需要,您将能够将您的活动从IIS进程移出以分离进程/机器。