在此项目中,我使用了MVC-3,其中包含输出缓存属性以及web.config中的相应引用,以及希望的global.asax(如下所示)。我从共享主机运行生产,并且无法运行aspnet_regsql作为管理员来创建适当的对象,因此我复制了AspNet_SqlCacheTablesForChangeNotification表SP,并从我的开发箱中触发以设置数据库。已删除或未创建SQLServer OutputCache对象
一般来说,一切都很好,但我发现大约每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>