6

我目前正在开发一个电子商务网站,并且有一个功能我不太确定如何实现。大多数情况下,您只需将产品添加到购物车并购买,这可能是最简单的工作流程。我要问的是有点不同,如果购买产品有时间限制怎么办?我的意思是一些网站给你一个购买产品的确切时间限制(比如足球经理),在那些你不能永远持有产品的网站上,它有 15 分钟的限制,如果你不在那个时期内购买,项目将从您的购物车中释放。(很可能其他人会跳上它)

现在,作为一名 ASP.NET MVC 程序员,我很想实现此功能,但正如我所说,我不知道该怎么做。我认为当我将商品添加到购物车时,我需要保持时间(类似于 ItemAddedAt),并且我需要在 x 分钟内发布该商品,因此需要在 x 分钟后运行某些内容才能发布该产品。全局思考,我认为我需要一项服务,当我添加一个项目时,我还需要将其订阅到该服务,并且服务在后台运行一个计时器/作业。我不知道/没有经验的是这部分,如何在 ASP.NET MVC 项目中做到这一点,是否有示例项目、文章、库或类似的东西?

当然我不知道我的逻辑是否适合这个问题,我需要一些指导,如果可能的话,需要一些源代码来处理。

4

2 回答 2

4

AFAIK 没有在 MVC 项目中声明/编程任务的标准方法。完成您想要的工作的推荐方法是在您的解决方案中创建一个新的控制台应用程序项目,并使用 Windows 任务计划程序每 X 分钟执行一次,在任何购物车中发布超过 X 分钟的任何产品。

为此,您需要从新项目中引用您的 MVC 项目(以访问所有模型),或者更好的是,创建一个类库项目,将您的模型/数据库类移到那里,然后从MVC 和控制台项目。


话虽如此,实际上有一个小的“hack”可用于在 MVC 项目中获取编程任务。您可以使用以下代码:

HttpContext.Current.Cache.Add("Task", "1", null, 
            DateTime.MaxValue, TimeSpan.FromMinutes(5), 
            CacheItemPriority.Normal, new CacheItemRemovedCallback(CheckCarts));

例如,可以从 Global.asax 调用的那行代码会将“任务”条目添加到缓存中。存储的值(“1”)并不重要,重要的是缓存条目在五分钟后过期,并且在过期时调用“CheckCarts”方法(在 Global.asax 中定义,或者在您执行的类中定义此代码)。

public void CheckCarts(string key, object value, CacheItemRemovedReason reason) {
     // Insert your code here to check for expired carts
     (...)

     // We add the entry again to the cache, so that this method will be called again in 5 minutes.
     HttpContext.Current.Cache.Add("Task", "1", null, 
            DateTime.MaxValue, TimeSpan.FromMinutes(5), 
            CacheItemPriority.Normal, new CacheItemRemovedCallback(CheckCarts));
}

当缓存过期时,会调用 CheckCarts 方法,您的代码会执行它必须做的任何事情,最后会再次将自己添加到缓存中,并在另外 5 分钟内调用。

于 2012-04-30T09:14:55.080 回答
3

这种情况只会让 signalR 尖叫。它可以让你以一种简单的方式做你所要求的。

如果您购物车中的商品有过期日期,您可以在任何商品过期时进行投票。如果他们有,您可以运行该项目的删除代码并更新您的 ui。

于 2012-04-30T13:56:39.250 回答