В этом проекте я использую MVC-3 с атрибутами кеша вывода и соответствующими ссылками в файле web.config и, надеюсь, в файле global.asax (ниже). Я запускаю производство с общего хостинга и не могу запустить aspnet_regsql от имени администратора для создания соответствующих объектов, поэтому я скопировал таблицу AspNet_SqlCacheTablesForChangeNotification, SP и триггеры из моего окна разработчика для настройки базы данных.
В целом все работает отлично, однако я обнаружил, что примерно раз в 2 или 3 дня все объекты кэширующей базы данных удаляются и не воссоздаются при запуске приложения. (никакой сценарий хостинга не удаляет их).
Чтобы сайт снова заработал, я вручную копирую объекты базы данных в резервную копию.
Как сделать так, чтобы объекты не удалялись или, наоборот, создавались автоматически?
Мой старт приложения в 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>