会话变量

时间:2017-08-08 10:02:23

标签: c# asp.net session caching console-application

我试图找到使用会话变量的替代方法。在我的解决方案中,我有一个由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;
    }
}

1 个答案:

答案 0 :(得分:0)

如果数据需要在整个应用程序中保持不变,那么您无法使用SessionHttpContext.Cache,因为这些数据取决于您不具备的当前HttpContext在控制台应用程序中。

另一种方法是将数据存储在某些持久性数据存储中,如数据库或分布式缓存,如Redis Cache / Azure Mem Cache

相关问题