【问题标题】:Is there a persistent storage per instance of ASP.NET application?每个 ASP.NET 应用程序实例是否有一个持久存储?
【发布时间】:2013-10-16 09:54:09
【问题描述】:

在我托管在 Windows Azure 中的 ASP.NET MVC3 应用程序中,我想知道应用程序已重新启动了多少次(以便我知道启动顺序是正确的)。所以我需要某种“变量”,我可以从Application_Start() 内部“增加”,但它应该以某种持久的方式存储,否则它根本无法在应用程序重启后存活下来。存储需要针对每个应用程序实例。

当然我可以使用系统注册表或一些临时文件,但我想应该有更好的东西。

在 ASP.NET 基础架构中有什么东西可以用于我的场景吗?

【问题讨论】:

  • 如果您可以访问文件系统,您可以在 AppData 目录中存储一个 Text 或 XML 文件。如果您有权访问 SQL Server,您也可以将其存储在那里。这看起来很简单,还是我错过了什么?
  • @ErikPhilips:是的,这很简单,但代码量很大。我希望有一些更简单的东西,比如会话变量。
  • @ErikPhilips - 如果这是在云服务中运行的 Web 角色,则本地存储将不够用,因为无法保证存储将保持存在。另外:即使您确实存储在每个实例上,您也只能通过连接到每个实例来收集此类数据。一旦你将in 扩展到更少的实例,你就会丢失有价值的数据。请参阅下面 Gaurav 的回答,了解外部化、持久的存储解决方案。

标签: asp.net asp.net-mvc-3 iis azure iis-7


【解决方案1】:

您可以为此使用Windows Azure Table Storage。只要大声思考,您可以有一个名为ApplicationRestarts 的表,并且每次应用程序启动时,您都可以将一个实体放入该表中。该实体可以具有以下属性:

  • PartitionKey:可能是应用程序重新启动的日期/时间。也可以是角色实例名称。
  • RowKey:同上。如果您选择日期/时间作为 PartitionKey,则角色实例名称可以是 RowKey,反之亦然。
  • RoleName:角色的名称(以防您有兴趣了解该名称)。
  • RoleInstanceName:角色实例的名称。
  • RestartTimestamp:日期/时间角色实例已重新启动。
  • 元数据:您可能想要捕获的其他一些信息。

【讨论】:

    【解决方案2】:

    如果您使用的是 Windows Azure 虚拟机,您可以创建一个将在回收池事件后触发的 powershell 脚本。

    http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx

    更多有用的链接:

    https://webmasters.stackexchange.com/a/17633

    https://stackoverflow.com/a/13623638/1384539

    【讨论】:

    • 好的,它会触发,然后我会做什么?
    • 既然可以捕捉事件,就可以为所欲为。即发送电子邮件,创建仪表板,
    • 当然,但是这些对于以编程方式找出应用程序重启了多少次不会很有用,对吗?
    • 对,我只是给了你另一个观点……你应该创建自己的存储系统。我推荐像 Redis 或 MongoDB 这样的 NoSql,因为它非常快,您可以在上面执行查询。另一种选择,您可以使用 Elmah 将其存储在 XML 文件或 SQL Server 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2012-11-14
    • 2020-07-24
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多