2016-09-21 13 views
0

MVCアプリケーションを開発していますが、これにはメソッドがあります。私はWindowsタスクスケジューラへのアクセス権がなく、Windowsサービスを実装することはできません。 (デプロイされたパッケージは異なる顧客に提供する必要があり、独自のサーバーを持っている必要があるため、Windowsサービスを展開したり、タスクスケジューラを使用したりしないでください)特定の時刻にメソッドを実行するMVCアプリケーション

特定の時間に何らかの方法を実行する方法はありますか? 。 私は使用タイマーである方法があることを見た。しかし問題は、この仕事は1日に1回しかやらなくてはならず、プロセスは1分以上かかることはないということです。

私たちがtimerを使用する場合、リソースはタイマーサービスに割り当てられます。このメソッドは1日に1回しか実行されないため、私は推測しているように、良い方法ではありません。 (プロセスは、すべての5,10分で実行されている場合、プロセスは、他の23時間と59分で実行されていて、それがリソースを浪費している。私は、タイマーコンセプトはOKだと思います)

私に方向....

+0

クォーツジョブスケジューラを見てください。 –

+0

"* Windowsサービスを実装することはできません*"、なぜできないのですか?プロジェクトがあなたの顧客に配備されると、配備プロセスの一部としてWindowsサービスをインストールすることができます。*顧客のマシン*上でメソッドを1日に1回実行する場合は、とにかく長時間実行するアプリを持っていなければなりません。 – Fabjan

+0

Take HangFireは、あなたが記述した目的のために設計されており、与えられた時間に仕事/方法を発動することができます:http://hangfire.io/ – LDJ

答えて

0

私はあなたが既にデータベースを持っているとします。 LastRunという名前の単一のdatetimeフィールドを持つテーブルを作成します。このフィールドに、メソッドが最後に実行された日時を保存します。

Session StartまたはApplicationのMVCアプリケーションで、LastRun datetimeと現在のdatetimeを比較し、上記の方法を実行するかどうかを決定します。メソッドが実行された後、LastRun値を更新します。

+0

これはday_processであり、深夜12時に実行する必要があるため、application_start()内の以下のコードで確認します。 \t DateTime dt = Convert.ToDateTime( "2016/09/22"); if(DateTime.Today == dt) { int x = 5; } 私のローカルマシンの時刻を2016/09/21 11:59 pmに変更し、bolowコードをトリガーするまで待ってください( "if"ブロック内にブレークポイントを追加します)。 – weeraa

+0

上記の提案された方法の欠点は、新しいアプリケーションまたはセッション開始イベントがトリガーされる必要があることです。 – Trifon

関連する問題