2012-05-09 10 views
2

ネットで構築されたウェブサイトで1日に1回(一度だけ)リンクが確実に鳴るようにしたいのですが、 共有サーバー上にあるので実行ファイルを実行できません。スケジュールされたタスクを作成するために24時間オンに切り替えられたPCへのアクセスはありません。URLを1日に1回ヒット

私のオプションは何ですか?

+0

アプリケーションの再起動に関して1日に1回ですか?結果は保存する必要がありますか?アプリケーションが再起動した場合、結果をディスクから再度読み込む必要がありますか? –

+0

@MAfifi - essentnally私はコードを実行する必要がありますいくつかのことを実行する必要がありますdb.byに私はコード – raklos

答えて

1

キャッシュクラスを使用できます。新しいキャッシュエントリを追加する場合は、24時間後に期限切れに設定し、期限切れのときに実行するイベントハンドラを渡すことができます。

イベントハンドラでは、キャッシュエントリをリセットできます。

onRemoveCallbackためCache.Addとパラメータを参照してください:

onRemoveCallback - タイプ:System.Web.Caching.CacheItemRemovedCallback オブジェクトがキャッシュから削除されたときに、提供されている場合、呼び出されたデリゲート。これを使用して、オブジェクトがキャッシュから削除されたときにアプリケーションに通知できます。

1

cronジョブは可能でしょうか?

0 0 * * * curl -q http://www.example.com/page.aspx 
+1

のブロックを実行することができますし、24時間に切り替えられているスケジュールされたタスクを作成する« - 代わりにWebCronサービスを提案することができます。 – Joey

0

あなたの最良の選択肢は静的なコンストラクタ+タイマー+ 1日に1回しか実行されないようにするための安全なガードです。

これを改善して、最初の実行を1日待たないでください。前回の実行が23時間前だった場合、1日を待たないでください。いくつかの数学は、本質的に次の実行が実行されてから24時間後であることを保証する。

何かのように、

private static DateTime _lastNavigated; 
private static Timer _myTimer 

static MyObject() 
{ 
    _myTimer = new Timer(24 * 60 * 60 * 1000); 
    _myTimer.Elapsed += MyOnceADayCode; 
    _myTimer.Enabled = true; 
} 

public static void MyOnceADayCode(object source, ElapsedEventArgs e) 
{ 
    _lastNavigated = DateTime.UtcNow; 
    if (DateTime.UtcNow > _lastNavigated.AddDays(1)) 
    { 
     // Haven't navigated in the last day, need to navigate again 
    } 
} 

もう一つのアイデアは、(あなたのアカウントがアクセス権を持っているかどうかに依存する)、スケジュールされたタスクを(コードを使用して)作成することです。 COMを使用してすべての作業を行う良いラッパークラスがあります。アプリの読み込み時にコードが確実に実行されるようにするには、静的コンストラクタが必要です。

0

ASP.NETを使用してWebサイトからスケジュールされたタスクを実行するには、this articleとお読みください。

関連する問題