【问题标题】:How to force data to update when the site is restarted如何在站点重新启动时强制更新数据
【发布时间】:2015-07-17 02:04:47
【问题描述】:

在 Global.asax.cs 中,我有 5 辆汽车的列表(模型,Cars.cs,从数据库中提取数据):

public class MvcApplication : System.Web.HttpApplication
{
    public static List<Car> Cars = Enumerable.Range(1,5)
        .Select(i => new Car(i))
        .ToList();

    protected void Application_Start()...
}

然后我使用首页上的列表:

@foreach(var C in MySite.MvcApplication.Cars)
{
    <a href="/Car_@C.Number">@C.Name</a>
}

我不知道如何强制 Cars 变量刷新。我发现最快的方法是登录服务器,打开 IIS,然后停止和启动网站 - 简单地重新启动它是行不通的。显然这是不可持续的,我确信有更好的方法......

这是我尝试过的其他一些事情:

  • 创建了一个脚本来停止网站,等待 5 秒,然后重新启动。这执行了停止和启动,但数据没有改变。
  • 创建 SQL 依赖项。这不起作用,因为我使用 dsn 连接到数据库(没有办法解决这个问题)。

我需要一种方法来自动执行此操作,这样用户就可以更新信息和刷新数据,而无需我在每次发生变化时都登录到服务器。

【问题讨论】:

  • 你为什么在 global.asax 启动期间收到你的Cars?调用 View 时不应该得到它吗?
  • @ChaseFlorell 我不想每次有人访问首页时都查询数据库。数据变化不够频繁,不足以使其可行。我希望能够告诉它何时重新加载数据。
  • 不过,解决方案不是在全局启动期间执行此操作。您可能最好设置某种缓存机制。老实说,即使您每分钟调用一次(60 秒缓存),调用也不会那么昂贵。
  • ^ 这个,或者分解你的声明和赋值,并在 app_start 分配一次,并编写允许你根据需要调用相同的赋值逻辑的功能。
  • 我会,但我在飞机上,电池电量低-_-。简而言之,只需将分配从 Cars 移动到全局方法,然后在应用程序启动时调用一次,然后从“刷新”页面调用。 @ChaseFlorell 如果我没记错的话,请查看不是 VM,考虑到它具有静态数据集,这似乎是一个一次性应用程序。对于这么小的功能来说,“好的设计”可能太重了。从某种意义上说,这个在全局中连接起来的全局数据集依赖完成了一个原始的“穷人的 DI”组合根。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

将分配分解为一个方法,并在应用启动时调用该方法,并根据需要在“刷新器”页面上调用该方法。如果您需要开始走这条路,这将为您提供良好的 DI。

public static List<Car> Cars;

public static void GetCars()
{
    Cars = Enumerable.Range(1,5)
    .Select(i => new Car(i))
    .ToList();
}

protected void Application_Start()
{
    GetCars();
}

然后调用 Global.GetCars() 以响应您页面上的 UI 事件。

【讨论】:

  • 我在汽车模型中的 HttpContext.Current.Server.UrlEncode(...) 上收到“响应在此上下文中不可用”错误。
  • 好的,改成WebUtility,现在测试。
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多