1

在这个项目中,我使用的是 MVC-3,带有输出缓存属性和 web.config 中的适当引用,希望还有 global.asax(如下)。我正在从共享主机运行生产,并且无法以管理员身份运行 aspnet_regsql 来创建适当的对象,因此我从我的开发框中复制了 AspNet_SqlCacheTablesForChangeNotification 表、SP 和触发器来设置数据库。

一般来说,一切都很好,但是我发现大约每 2 或 3 天一次,所有缓存数据库对象都会被删除,并且不会在应用程序启动时重新创建。(没有托管 co 脚本正在删除它们)。

为了让站点再次运行,我最终手动复制数据库对象备份。

我怎样才能不删除对象,或者自动创建它们?

我的应用程序在 global.asax 中开始看起来像这样:

protected void Application_Start()
{
     RegisterGlobalFilters(GlobalFilters.Filters);

     SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
    SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString, "be_Posts");
    SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString, "be_PostTag");

     SiteMap.Provider.SiteMapResolve += new SiteMapResolveEventHandler(SiteMapPathExpansionResolver.OnSiteMapResolve);
    RegisterRoutes(RouteTable.Routes);
}

我的应用端看起来像这样:

protected void Application_End()
    {
        SqlCacheDependencyAdmin.DisableTableForNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString, "be_Posts");
        SqlCacheDependencyAdmin.DisableTableForNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString, "be_PostTag");
        SqlCacheDependencyAdmin.DisableNotifications(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
    }

web.config 条目如下所示:

<caching>
  <sqlCacheDependency enabled="true"   pollTime="10000"   >
    <databases>
      <add name=" db"
         connectionStringName="ApplicationServices"
         pollTime="10000"
      />
    </databases>
  </sqlCacheDependency>
</caching>
4

1 回答 1

0

所以我通过注释/删除 Application_End 中的 Disables 有效地解决了这个问题。我已经读过这使 sql server 具有打开的句柄,但我没有找到任何其他有效的解决方案。我尝试添加创建触发器和启动事件来重新创建表等以及许多其他方法,但似乎只有删除禁用项才有效。

我希望我所在的共享和数据库服务器没有问题,但托管公司没有向我抱怨,我真的无法知道这种方法是否会导致并发症,因为他们不授予访问权限一种监控。

于 2012-03-13T05:41:41.840 回答