【问题标题】:Alternative to Session Variable会话变量的替代方案
【发布时间】:2018-01-15 20:19:41
【问题描述】:

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

【问题讨论】:

  • 如何在控制台应用中对用户进行身份验证?
  • @CodeCaster 我添加了一个编辑
  • 显示更新对象的代码。类库不应引用 System.Web。
  • @CodeCaster 我添加了一个更新工作原理的示例。同意 System.Web 评论。这就是为什么我试图找到一种比检查 HttpContext 和使用会话更好的方法,如果不使用 MemoryCache
  • 您已经在使用 IoC 模式了吗?看来您可以有一个IIdentifyUser 接口,可以将其注入到需要了解用户的类中,然后构建简单的 Asp.Net 和 Console 实现。 (显然,控制台不允许一次请求多个操作,使其成为非线程安全的,但同样如此,您的内存缓存建议也不会。如果您需要控制台应用程序中的线程安全,您几乎可以肯定必须字节子弹并传递参数)

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


【解决方案1】:

如果数据需要在应用程序中保持不变,那么您不能使用SessionHttpContext.Cache,因为它们依赖于您在控制台应用程序中没有的当前HttpContext

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

【讨论】:

  • 以防我感到困惑。我不需要在控制台应用程序和 ASP.NET 应用程序之间共享 ID。我需要他们都引用的项目来了解 ID。控制台应用程序使用 core。 ASP.NET 使用 核心core 需要知道用户 ID。 ref'd 项目是一堆编译成 DLL 的类。
猜你喜欢
  • 2018-09-10
  • 2012-02-16
  • 1970-01-01
  • 2018-11-25
  • 2010-11-19
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多