【问题标题】:MVC initialization each time the web site is opened每次打开网站时的 MVC 初始化
【发布时间】:2014-04-15 13:00:52
【问题描述】:

我已经尝试过静态 C# 构造函数(用于 MVC 控制器)和 Global.asax.cs,但不幸的是应用程序似乎徘徊,所以当一个用户退出,另一个用户打开 MVC 应用程序时,静态变量初始化不会(总是) 发生。显然,这些静态变量“存在”于应用程序实例之外(即当应用程序在网站上打开和关闭时)。

有谁知道在打开和/或关闭 MVC 网站(即主索引页面)时始终有效的方法?此时我需要重新初始化我的静态 C# 控制器成员......

提前致谢。

【问题讨论】:

  • “所以当一个用户退出,而另一个用户打开 MVC 应用程序”/“(即当应用程序在网站上打开和关闭时)”呃......我不确定你完全明确网络应用的工作原理
  • 我认为您将 win forms 应用程序与网络应用程序混淆了......网络应用程序域一直存在,直到它因空闲而死亡。
  • @TMcKeown 回收/关闭标准可能会有所不同;闲置不一定会导致应用关闭
  • 应用回收和闲置在我的书中是一回事。我的观点是 应用程序 不会在单个页面生命周期结束时死亡。

标签: c# asp.net-mvc static initialization startup


【解决方案1】:

网站的生命周期与个人用户几乎没有关系。事实上,在最新版本的 IIS 中,它甚至不需要传入请求来启动应用程序 - 它可以选择在任何流量之前先发制人地执行此操作。同样,用户之间也不会重做任何事情。由于 http 流量基本上是断开的,因此无法确定用户何时离开。 Web 服务器通常具有回收/关闭标准,但这在很大程度上与用户无关。

Web 应用程序的生命周期:

  • 它在某个时候开始,也许是自发的,也许是由于传入的请求,也许是应用程序池循环的一部分
  • 它为来自不同用户的大量 http 请求提供服务;经常同时发生,而且经常交错
  • 在某个时候,它会关闭;可能是由于不活动,可能是由于应用程序池循环,可能是由于服务器关闭

这里没有与用户相关的特殊生命周期。从 Web 服务器的角度来看,您只能看到单个请求,它们只会持续到您响应它们的时间。您不知道他们什么时候关闭了浏览器,也不知道他们在浏览器上打开了标签页并休假了一周。

种方法可以了解更多信息,但它们不直接涉及 Web 服务器,它们当然不应该与任何控制器成员状态相关联。如果它影响控制器状态:你做错了。

【讨论】:

    【解决方案2】:

    可以在控制器的 index() 方法中为应用程序的“主页”(新用户进入应用程序时始终访问该页面)执行以下操作:

    我们的应用程序跟踪登录用户,因此可以使用静态变量跟踪旧用户,当此变量发生变化时,对其他静态变量运行“初始化”,最后将跟踪用户设置为新用户。这适用于我想要完成的工作。

    注意:我们没有高度交易的系统,只有少数用户,不应该同时有多个用户。如果有,这可能会变得一团糟!

    【讨论】:

    • stackoverflow.com/questions/18479297/… 对使用静态变量的替代方法进行了很好的讨论。根据您的情况,其中一些替代方案可能效果更好。我在MVC(asp.net)中了解到静态变量是非常全局的,所以正如其他发帖者所提醒的,谨慎使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多