【问题标题】:ASP.NET MVC 3 incorrectly caching outputASP.NET MVC 3 错误地缓存输出
【发布时间】:2011-11-07 12:56:08
【问题描述】:

我有一个带有 SQL Server 2005 数据库后端的 ASP.NET MVC 3 应用程序。它使用 LINQ to SQL 链接到数据库。在某些情况下,应用程序会更新数据库,但有时它仍会缓存不应缓存的旧数据。

例如,如果用户填写表单以发布BlogEntryComment(我的 LINQ to SQL 类型之一),它将被添加到数据库中。但是,新的BlogEntryComment 不会出现在我请求它的视图中。此外,如果我删除 BlogEntryComment,它仍会显示在视图中。以下是我对这种行为的确定:

  • 不是浏览器缓存造成的。我已经清除了缓存;在不同的浏览器和不同的计算机上同时尝试;无济于事。

  • “顶级”类型不会发生这种情况,例如我的 BlogEntry 类型。像BlogEntryComment 这样的类型与我的“顶级”类型有关系(一个BlogEntry 与许多cmets)会发生这种情况。

  • 如果我重新启动服务器,或者在其他服务器上尝试,它似乎会清除它所在的任何缓存,并且我不会得到错误的结果。

  • 它最终会显示更新后的数据,但最终显示需要 15 分钟。

我已尝试关闭在 Web.config 中可以找到的所有类型的缓存选项:

...
<system.web>
    ...
    <caching>
        <outputCache enableOutputCache="false" enableFragmentCache="false">
        </outputCache>
    </caching>
    <httpRuntime enableKernelOutputCache="false" />
</system.web>
<system.webServer>
    ...
    <caching enabled="false">
    </caching>
</system.webServer>
...

...但没有运气。有什么想法吗?

【问题讨论】:

  • 您是如何获取数据的?您没有在某处缓存您的 l2s 数据上下文吗?
  • @Nik:我有一个用于整个应用程序的 DataContext 单例实例(类的静态成员)。所有控制器都去这个 DataContext 获取数据。

标签: asp.net asp.net-mvc linq-to-sql caching


【解决方案1】:

查看 l2s DataContext 的文档。它的意义是短暂的 - 即创建和处理每个 http 请求。如果它像您描述的那样是静态的,那么它将与应用程序域一样长。

最有可能发生的情况是您的 DC 停留在内存中,并且后续的数据请求不会发送到数据库。 15 分钟或任何时间后,您的应用程序域会回收,您会获得一个新的 DC 和新的数据。

【讨论】:

  • 这非常有效。我现在每次都创建一个新的 DataContext 对象。谢谢!
【解决方案2】:

检查您的操作是否有[OutputCache] 装饰。它会覆盖web.config

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2011-08-13
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多