Classic ASP で定期的なデータベース クリーンアップ タスクをスケジュールするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1707793

質問

クラシック ASP サイトを持っていますが、スケジュールに従ってセッション データからいくつかのデータベース テーブルを空にする必要があります。このシステムはスケジュールされたタスクにアクセスできません (共有 Web ホスト上にあり、MySQL サーバーを使用しています)

利用を検討していたのですが global.asa, 、イベント自体を起動するには:

  1. Application_OnStart - データベースからすべてのセッション データを削除します
  2. Application_OnEnd - すべてのセッション データを削除します
  3. Session_OnStart - ユーザーのセッションを作成する
  4. Session_OnEnd - このセッションに関連するすべてのセッション データを削除します。

データベース接続を作成すべきではない理由はありますか? global.asa?これらはここで作成および破棄され、セッションまたはアプリケーション スコープでは共有されません。私はこれを、これらの管理タスクをユーザーごとに 2 回 (セッションの開始時と終了時) 実行し、それらの管理タスクが再度実行されないようにし、データベース トラフィックを非常に少なくする方法だと考えています。

これがなぜ悪いのかについて何か考えがある人はいますか?データベースに接続できない理由 global.asa?

上記のアイデアが悪いと思う人がいる場合、次の 1 つ以上を使用せずにこれらのテーブルを定期的に空にする方法について他に考えはありますか?

  1. スケジュールされたタスク
  2. データベースのスケジュールされたタスク
  3. すべてのページのページロード時にコードを実行します(したがって、 Session_OnStart フック)

たぁ

シニアココナッツ

役に立ちましたか?

解決

私はSession_OnEndで、単一のセッションのためにとApplication_OnStart内のすべてのセッションのためにクリーンアップを行うと思います。あなたのすべてのセッション・クリーンアップが遅い場合は、あなたが醜いことを行うと、あなたはXMLHTTPクラスを使用してHTTPリクエストを行う別のASPファイルでそのクリーンアップを置くことができ、それのように完了するために要求を待たないようにしてくださいApplication_OnStartのすべてのコードが実行される前に提供されて開始されません。

他のヒント

あなたは、セッションテーブルを空にしたWebページを作成して、スケジュールされたタスクを介して外部ボックスからそのページを呼び出すことができます。

これはあなたのクリーンアップタスクの所要時間によって異なります。 Application_Startが動作している間は、要求が配信されますので、しばらく遮断することができる。

また、あなたはApplication_End(またはのSession_End)は、すべての場合に呼び出されるという保証がありません(サーバーがシャットダウンされたとき、それは解雇、またはされないかもしれませんが、完全にこれらのイベントをバイパスして、いくつかの致命的な障害)。

あなたは古いセッションデータをクリーンアップを担当するスケジュールされたタスクを実行するために、提案として最良の方法は、なります。

あなたは一貫したトラフィックを持っている場合は、要求サイクルの終わりに小さなタスクを背負うことができます。ただ、response.flushを発行して、DBクエリを実行します。もちろん、あなたがyoureの独自のスケジューラを作成する必要があります。別のオプションを使用すると、リクエストの開始時にサーバーサイド、非同期、xmlhttpreqを使用してpingを実行別々のASPファイル(タスクレット)を作成することです。これは、クライアントの要求サイクルのうち、クリーンアップコードを保持し、待ち時間を短縮します。

スケジュールにyoureのレガシータスクレット/ウェブフックにpingを実行できるいくつかの巧妙なAppEngineのもとwebappr / APIは、すでに存在しない場合は、

実際に私は驚いことwoudn't。そして、そこではない場合、あなたは1つのyoureの自己を書くことができ、オプションは無限大です:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top