ネットで構築されたウェブサイトで1日に1回(一度だけ)リンクが確実に鳴るようにしたいのですが、 共有サーバー上にあるので実行ファイルを実行できません。スケジュールされたタスクを作成するために24時間オンに切り替えられたPCへのアクセスはありません。URLを1日に1回ヒット
私のオプションは何ですか?
ネットで構築されたウェブサイトで1日に1回(一度だけ)リンクが確実に鳴るようにしたいのですが、 共有サーバー上にあるので実行ファイルを実行できません。スケジュールされたタスクを作成するために24時間オンに切り替えられたPCへのアクセスはありません。URLを1日に1回ヒット
私のオプションは何ですか?
キャッシュクラスを使用できます。新しいキャッシュエントリを追加する場合は、24時間後に期限切れに設定し、期限切れのときに実行するイベントハンドラを渡すことができます。
イベントハンドラでは、キャッシュエントリをリセットできます。
はonRemoveCallback
ためCache.Add
とパラメータを参照してください:
onRemoveCallback - タイプ:
System.Web.Caching.CacheItemRemovedCallback
オブジェクトがキャッシュから削除されたときに、提供されている場合、呼び出されたデリゲート。これを使用して、オブジェクトがキャッシュから削除されたときにアプリケーションに通知できます。
cronジョブは可能でしょうか?
0 0 * * * curl -q http://www.example.com/page.aspx
のブロックを実行することができますし、24時間に切り替えられているスケジュールされたタスクを作成する« - 代わりにWebCronサービスを提案することができます。 – Joey
あなたの最良の選択肢は静的なコンストラクタ+タイマー+ 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を使用してすべての作業を行う良いラッパークラスがあります。アプリの読み込み時にコードが確実に実行されるようにするには、静的コンストラクタが必要です。
ASP.NETを使用してWebサイトからスケジュールされたタスクを実行するには、this articleとお読みください。
アプリケーションの再起動に関して1日に1回ですか?結果は保存する必要がありますか?アプリケーションが再起動した場合、結果をディスクから再度読み込む必要がありますか? –
@MAfifi - essentnally私はコードを実行する必要がありますいくつかのことを実行する必要がありますdb.byに私はコード – raklos