こんにちは皆さん、私は、エンド ユーザーが当社のサーバーの 1 つにファイルをロードできるようにする Web アプリを作成するタスクを与えられました。サーバーはファイルを操作し、エンド ユーザーに返します。サーバーには IIS7 と .net フレームワーク 4 があります。これが私の問題です。一度操作したファイルをサーバーから取り除くのに苦労していることを除いて、すべてを理解しました。コードでサーバーからファイルを削除するために、30 分後にタイマーを設定する方法はありますか? またはこれを行う別の解決策はありますか?タイマーの提案がおそらく意味をなさないことは知っていますが、それを行う別の方法が思いつかないので、意見または別の方法を探しています。
4 に答える
タイマーは、将来の予定を立てるのに適した方法です。ユーザーがファイルを再度要求した場合は、タイマーをリセットすることもできます。タイマーが起動したときにファイルを削除するデリゲートをタイマーに与えるだけです。
アプリが常に実行されていることを確認できる場合は、スケジュールされたタスクをスキップしてQuartz.NETを使用できます。この場合、クォーツを使用してシャットダウンしてもそれほど悪くはありません-アプリがアイドル状態のときにいくつかの古いファイルがぶら下がっていても問題がない場合を除きます。
これを処理する限り、私は適切な方法 (たとえば、データベース) で、ジョブが完了したことと削除されたことを示すマーカーを含むファイルのリストを保存します。Quartz タスクは、完了とマークされているが削除済みとマークされていないファイルを取得して、それらをクリーンアップできます。ファイルの削除と更新、およびログ記録に関するトランザクションを使用するためのボーナス ポイント。世界が眠っている間に何が起こったのかを知ることができます。
操作後に削除しないのはなぜですか?または、プロセスの最後のステップは何でしょうか? それが最善かつ最も簡単な方法のようです。
ボリュームにもよりますが、ファイルごとに 1 つのタスクを実行するのはおそらく良い考えではありません。むしろ、それらをキューにバッチ処理し、単一のスレッドでキューを処理する必要があります。
たとえば、 (おそらくTimer を使用して) global.asaxでバックグラウンド スレッドを起動し、ファイル時間などを比較してクリーンアップ タスクを処理できます。
または、プロセスのステップ 1 として、古いファイルを消去することもできます。まったく同じではありませんが、十分に近いかもしれません。
サーバーでスケジュールされたタスクを設定できますか?
この種のことは、たとえば now.AddMinutes(-10) よりも古い変更日時を持つファイルを単純に削除する単純なコンソール アプリに最適です。
必要に応じて、タスクを 10 分ごとに実行することもできます。
この種のものを Web サイトから遠ざけることが最善の場合もあります。あなたのサイトがあなたのユーザーにサービスを提供し、あなたのサーバーにサービスを提供するために何か他のものを作成しましょう.. :)
更新 トラフィックの多いサイトの場合は、次に誰かがファイルをアップロードしたときに古いファイルをすべて削除するだけで済みます。そう:
ユーザーがアップロードするファイルを選択し、[アップロード] をクリックします -> ファイルを取得します -> 古いファイルを削除します (所有者に関係なく) -> ファイルを操作します -> ファイルは次のユーザーのアップロードで削除されます...