このプロジェクトでは、MVC-3を使用しており、出力キャッシュ属性と適切な参照がweb.configにあり、できればglobal.asax(下記)にあります。共有ホスティングから本番環境を実行していて、管理者としてaspnet_regsqlを実行して適切なオブジェクトを作成できないため、AspNet_SqlCacheTablesForChangeNotificationテーブル、SP、およびトリガーを開発ボックスからコピーしてデータベースをセットアップしました。
一般的に、すべてがうまく機能しますが、約2〜3日に1回、すべてのキャッシュデータベースオブジェクトが削除され、アプリの起動時に再作成されないことがわかりました。(ホスティング共同スクリプトはそれらを削除していません)。
サイトを再び機能させるために、データベースオブジェクトを手動でコピーしてバックアップすることになります。
オブジェクトを削除したり、オブジェクトを自動的に作成したりできないようにするにはどうすればよいですか?
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>