Объекты SQLServer OutputCache удалены или не созданы - PullRequest
1 голос
/ 03 июля 2011

В этом проекте я использую MVC-3, с атрибутами выходного кэша и соответствующими ссылками в web.config и, надеюсь, global.asax (ниже).Я запускаю производство с общего хостинга и не могу запустить aspnet_regsql в качестве администратора для создания соответствующих объектов, поэтому я скопировал таблицу AspNet_SqlCacheTablesForChangeNotification, SP и триггеры из моего окна dev для настройки базы данных.

В общем, все работает отлично, однако я обнаружил, что примерно каждые 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>

1 Ответ

0 голосов
/ 13 марта 2012

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

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

...