我试图找到使用会话变量的替代方法。在我的解决方案中,我有一个由ASP.NET Web应用程序和控制台应用程序引用的项目。这两个应用程序都可以对数据进行更改,并且在进行更改时,将对该行记录进行更改的用户的ID。
因此,如果只是ASP.NET应用程序进行更改,它可以执行类似myObj.LastUpdatedByID = Session["userid"]
的操作。鉴于命令行应用程序需要进行更改并且没有会话,我可以使用哪种替代方法在ASP.NET中具有相当于会话范围但在控制台应用程序范围中也可用?
我已经看过MemoryCache,但这似乎是ASP.NET中的应用程序级别。
我不希望将用户ID传递给每次通话。
会做一些事情,例如检查HttpContext,如果有,请从会话中拉出来,如果没有,请从MemoryCahce中取出?或者有更好的方法吗?
编辑: 用户ID在控制台应用程序中专门设置,具体取决于正在执行的操作。控制台应用程序用于自动化流程,并且它承担了许多操作。因此,例如,发送电子邮件进程将由用户ID 1执行,删除旧文件进程将由用户ID 2执行。在一些实例中,用户ID将设置为上次对该行数据进行更改的用户ID。
编辑: 一些示例代码(为简洁而剥离)。您可以在这里看到我正在使用MemoryCache,据我所知,它将是应用程序范围的,因此无法在ASP.NET应用程序中使用:
public class Base(
{
private int auditID = -1;
public int AuditID
{
get
{
if (this.auditID <= 0)
{
ObjectCache memCache = MemoryCache.Default;
this.auditID = ((int)memCache["CurrentUserID"]);
}
return this.auditID;
}
}
}
public class MyObject : Base
{
public int LastUpdatedByID { get; set; } = 0;
public bool Save()
{
bool b = false;
this.LastUpdatedByID = this.AuditID;
//Call to DB here...
return b;
}
}
答案 0 :(得分:0)
如果数据需要在整个应用程序中保持不变,那么您无法使用Session
或HttpContext.Cache
,因为这些数据取决于您不具备的当前HttpContext
在控制台应用程序中。
另一种方法是将数据存储在某些持久性数据存储中,如数据库或分布式缓存,如Redis Cache
/ Azure Mem Cache