1

このプロジェクトでは、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>
4

1 に答える 1

0

そこで、Application_EndからDisablesをコメント化/削除することで、効果的に解決しました。これによりSQLサーバーのハンドルが開いたままになることを読みましたが、機能する他のソリューションは見つかりませんでした。作成トリガーや起動イベントを追加してテーブルなどを再作成しようとしましたが、無効化を削除するだけでうまくいくようでした。

私が使用している共有サーバーとデータベースサーバーに問題がないことを願っていますが、ホスティング会社は私に不満を言っておらず、このアプローチが問題を引き起こすかどうかを知る方法はありません。一種の監視。

于 2012-03-13T05:41:41.840 に答える