このタスクを達成するための最良の方法を見つけようとしてきましたが、私が考えていることをできるだけ簡単に説明しようとします.
私は woot.com や whiskeymilitia.com などに似た Web サイトを扱っており、その日の取引または特定の時間制限のある IE: 15 分の取引があります。アプリケーションの起動時にx秒ごとに実行されるタイマーを作成しようとしています。たとえば、5秒ごとに実行し、取引時間制限が経過したかどうかを確認します。
現在、データベースにクエリを実行して、表示する必要があるアクティブな取引を取得していますが、これを Application_Start 内に実装する方法が完全にはわかりません。基本的には、取引と取引制限時間 + 経過時間をチェックし、その時点でその取引を非アクティブとしてフラグを立てるかどうかを決定します。アプリケーションの開始時に照会したモデルをコントローラーにルーティングすることは可能ですか?
これはここで私にとって新しい概念であり、確実な解決策を見つけたいと思っているので、どんな種類のアドバイスも素晴らしいでしょう!
必要に応じて、何でも明確にしてください。再度、感謝します :)
- 編集 -
SqlDependency を調べた後、すべてをテストするとエラーが発生しました。
現在のデータベースの SQL Server Service Broker が有効になっていないため、クエリ通知はサポートされていません。通知を使用する場合は、このデータベースの Service Broker を有効にしてください。ホストは、データベースで SQL Service Broker を有効にする必要があります。ほとんどの共有環境ホスティング会社は、専用サーバー環境向けであると述べて、これを避けるようです。
代替手段を探しています。同じことに遭遇する前に人々がピークに達するように、私はこれをやめると考えました。
-- 午後 8 時 30 分編集 --
そのため、この問題を解決するために Cache クラスを利用しようとしましたが、完全に立ち往生しています。
public ActionResult Index()
{
CurrentDealModel model = new CurrentDealModel();
model.DealQueueDetails = db.FirstOrDefault<ProductQueue>("SELECT * FROM ProductQueue WHERE Active = 1");
model.ProductDetails = db.FirstOrDefault<Product>("WHERE Id = @0", model.DealQueueDetails.ProductId);
return View(model);
}
変数 model.DealQueueDetails.DealTimeLimit に保存されている時間、このデータをコントローラーにキャッシュしたい - このソリューションの問題は、管理者が取引を表示する期間を決定することであり、キャッシュする必要があることを意味します。その値に。追加の助けを貸してくれる人がいるなら、私はとても感謝しています!
ジェームス・ジョンソンと私が試した他の人による
Cache.Insert("AbsoluteCacheKey", cacheData, null, DateTime.Now.AddMinutes(15), System.Web.Caching.Cache.NoSlidingExpiration
ただし、モデルに cacheData を設定すると、NullReferenceException が返されます。はあ、なんでこんなに苦戦しなきゃいけないんだろう。