Объекты SQLServer OutputCache удалены или не созданы

В этом проекте я использую 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>

person Peter K    schedule 03.07.2011    source источник


Ответы (1)


Поэтому я эффективно решил эту проблему, закомментировав/удалив Disables из файла Application_End. Я читал, что это оставляет сервер sql с открытыми дескрипторами, но я не нашел другого решения, которое сработало. Я попытался добавить триггеры создания и события запуска для воссоздания таблиц и тому подобного и ряд других подходов, но, похоже, сработало только удаление Disables.

Я надеюсь, что у общего сервера и сервера БД, на котором я нахожусь, нет проблем, но хостинговая компания не жаловалась мне, и у меня действительно нет возможности узнать, вызывает ли этот подход осложнения, потому что они не предоставляют доступ к этому вид мониторинга.

person Peter K    schedule 13.03.2012