【问题标题】:Confusion over Startup, Global, Application and Session对启动、全局、应用程序和会话的困惑
【发布时间】:2014-05-23 16:05:49
【问题描述】:

我正在尝试了解存储和实例化应用程序(即每个用户都可以使用的对象)和会话级别(创建的对象并且仅对用户会话可用的对象)变量的各种方式。另外,OWIN 是如何融入这一切的?

  1. Global.asax.cs - 这可以包含一堆不同的方法。我相信 Application_Start 仅在第一个请求期间被调用。但是,这里有一些候选方法可以填充会话级变量(例如 Session_Start 和 Application_BeginRequest)。这样做的标准方法是什么?

  2. 还有 OWIN 使用的 Startup 类。我知道 OWIN 允许您存储应用程序级别的变量,但您为什么不直接使用可从 Global.asax.cs 访问的 HttpApplicationState 应用程序变量来完成此操作呢?还有——OWIN 可以处理 Session 变量吗?

【问题讨论】:

  • 我认为您应该拆分并重新关注您的问题,以促进与 SO 上的人们的互动。您可能还想提供一个场景,以便读者可以构建问题并提供更适合您需求的答案。目前,您正在寻找一个知道所有这些问题的答案的人,而从统计上看,个人更有可能知道如何回答单个特定问题。
  • 例如,我的应用程序是多租户的。我需要解析请求的域并以某种方式存储它,以便该请求上下文中的任何内容都可以访问它以查看它存在于哪个上下文中(即哪个站点)。
  • 改写问题 William,一旦你对第一个问题有了答案,就拿出 OWIN 的东西并把它放在自己的问题中。答案可能会影响您对 OWIN 的询问。
  • 我想我最大的问题是我不知道如何正确地问这个问题——从我的角度来看,OWIN 仅用于存储应用程序级别的变量,这似乎与应用程序变量完全重叠在 Global.asax.cs - 但我猜它也能做更多的事情?
  • 我认为您对 OWIN 是什么以及它的用途有误解。

标签: asp.net asp.net-mvc owin


【解决方案1】:

"我相信 Application_Start 只在第一次调用 请求。”

仅适用于调用 Web 应用程序后的第一个请求。比如部署后、ApplicationPool回收、重启或退出休眠等情况。

假设有 3 个用户访问您的 Web 应用程序。 Application_Start 只会被其中一个调用,特别是第一个访问它的。因此它不适合填充用户特定的会话值。

但是,这里有一些候选方法可用于填充会话级变量(例如 Session_Start 和 Application_BeginRequest)。这样做的标准方法是什么?

过去,我曾与Session_Start 合作,在许多项目中初始化用户特定的会话值(如默认值),但从未遇到过问题。

【讨论】:

    【解决方案2】:

    正如我在 cmets 中所说,我真的不确定问题是什么。我会忽略 OWIN 的东西,因为我不知道,坦率地说。

    首先,尽量不要存储状态。设计以在模型或 URL 中在服务器和客户端之间来回传递状态,甚至在客户端上的 HTML 中,例如在您的呈现的 <a> 标记中的 URL 中,或(很少)在 cookie 中,而不是保留东西在记忆中。无状态设计更具可扩展性。

    存储状态不是“通常”在Global.asax 中完成的,但那通常是什么?我在需要时存储状态,加载它或以其他方式获取该数据。对于 MVC 中的我来说,这通常是控制器操作的下游,可能是在登录某人或读取模型中收到的一些数据时,例如客户单击“添加到购物车”。

    我很少使用应用程序状态,尽管我将长期存在的和共享的数据存储在正常的字段中,并将属性存储在长期存在的静态类中。当应用程序被回收时,它们会死掉,但我通常不在乎,因为应用程序被设计为在没有它的情况下工作,无状态;它通常缓存的数据位。

    此外,Session_Start 仅在新浏览器/代理访问该站点时触发。那时你还不认识用户。

    Global.asax 中的方法并不是专门为“引导”状态加载而设计的,它们只是方便您做任何事情的事件。您根本不必使用它们,我的通常只包含日志记录,所以我知道会话何时开始等!

    我不知道这是否有帮助。

    一旦你有了一个计划,回来就OWIN的东西提出一个有针对性的问题。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多