一直试图找出完成这项任务的最佳方法,我将尝试尽可能直截了当地解释我的想法。
我正在使用类似于 woot.com、whiskeymilitia.com 等的网站,其中有当日交易或特定时间限制,即: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。感叹我为什么要为此挣扎这么多嘿嘿。