10

Web サービスからレコードをプルする MVC 3 c# Web サイトを実行しています。Web サービスから取得するデータセットがますます大きくなるにつれて、キャッシュの作成が、現在のキャッシュがないときにサイトにアクセスした最初のユーザーによってトリガーされるのではなく、毎日のスケジュールでトリガーされる方法を探しています。 (cronジョブ、スケジュールされたタスクなど)。

どうすればいいですか?Quartz.netのような何らかのトリガー ライブラリが必要ですか? (私はむしろより単純なソリューションを使用したい)

現在コントローラーにあるものは次のとおりです。

private List<DataSummary> GetSummaries()
    {
        //get summaries from cache if available
        List<DataSummary> summaries = (List<DataSummary>)HttpContext.Cache["SummariesCache"];
        if (summaries == null)
        {
            //cache empty, retrieve values
            summaries = _webservice.GetSummaries();
            //cache it
            HttpContext.Cache.Add("SummariesCache", summaries, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
        }
        return summaries;

    }

編集

使用するCacheItemRemovedCallbackとタイムアウト エラーが発生する

4

1 に答える 1

2

これはちょっとハックな解決策ですが、サーバー上で実行可能ファイルを実行するスケジュールされたタスクをいつでも作成できます。この実行可能ファイルは Web サイトの特定の URL にヒットし、上記で概説したとおりにキャッシュに入力されます。実行可能ファイルの URL にアクセスするには、次の行に何かが必要です。

var req = (HttpWebRequest)WebRequest.Create(URL);
req.Timeout = 30000;        
req.KeepAlive = false;
req.Method = "GET";
var res = (HttpWebResponse)req.GetResponse();
if (res.StatusCode == HttpStatusCode.OK){
    // Your cache should be refreshed
}

スケジュールされたタスクの作成も非常に簡単です。作成するexeに対する実行権限を持つユーザーアカウントで実行し、タスクを開始するためにユーザーがログオンする必要がないことを確認してください.

編集: Windows Server 2008 でスケジュールされたタスクを設定するためのガイドを追加しました

  1. スタートメニューを開きます。
  2. 検索ボックスに「タスク スケジューラ」と入力します (古いバージョンの Windows では、これは管理ツールで「スケジュールされたタスク」として見つかったと思います)。タスク スケジューラの結果を開きます。
  3. 左側のツリーのルート ノード [タスク スケジューラ (ローカル)] を右クリックし、[基本タスクの作成] を選択します。
  4. 後で識別できるように、タスクに名前と説明を付けます。次へをクリックします。
  5. あなたの期間を選択してください(あなたの場合、毎日の音はほぼ正しいです)。次へをクリックします。
  6. 必要に応じて開始時間を変更してください。次へをクリックします。
  7. アクションは「プログラムの開始」のままにします。次へをクリックします。
  8. [参照...] をクリックして、作成した実行可能ファイルを見つけます。次へをクリックします。
  9. 最後の画面で、[プロパティ ダイアログを開く...] というボックスにチェックを入れて、[完了] をクリックします。
  10. セキュリティ オプションを「ユーザーがログオンしているかどうかに関係なく実行する」に変更します。必要に応じて、ユーザーまたはグループを適切なユーザー アカウント (exe を実行するために必要なアクセス許可を持つアカウント) に変更します。
  11. [OK] をクリックします。タスクを実行するアカウントのパスワードを入力するよう求められます。これを行い、[OK] をクリックします。
  12. 左側の [タスク スケジューラ ライブラリ] をクリックします。右側のリストにタスクが表示されます。右クリックして [実行] を選択すると、テストできます。
于 2013-02-25T09:29:17.037 に答える