C# 每分钟在WebAPI应用程序上检查一个条件

C# 每分钟在WebAPI应用程序上检查一个条件,c#,asp.net,scheduled-tasks,asp.net-web-api,C#,Asp.net,Scheduled Tasks,Asp.net Web Api,我正在学习使用MicrosoftWebAPI进行基本的web应用程序开发。我已经创建了一个饮料订购服务,用户在其中订购饮料,将其发布到服务器,服务器将其存储起来以备将来使用 用户将订单发布到OrdersController上的RESTful端点。端点将顺序存储在列表中,并根据条件检查列表。例如,“订单数量是否大于5?”)。如果满意,服务器将使用谷歌云消息服务向用户的手机发送推送通知 我希望扩展可能触发推送消息的条件类型。例如,“如果在过去5分钟内未收到订单,则发送推送通知”。换句话说,我需要更频

我正在学习使用MicrosoftWebAPI进行基本的web应用程序开发。我已经创建了一个饮料订购服务,用户在其中订购饮料,将其发布到服务器,服务器将其存储起来以备将来使用

用户将订单发布到
OrdersController
上的RESTful端点。端点将顺序存储在列表中,并根据条件检查列表。例如,“订单数量是否大于5?”)。如果满意,服务器将使用谷歌云消息服务向用户的手机发送推送通知

我希望扩展可能触发推送消息的条件类型。例如,“如果在过去5分钟内未收到订单,则发送推送通知”。换句话说,我需要更频繁地检查条件,而不仅仅是为了响应新的订单请求

实现这一目标的最佳方式是什么?我最初的想法是创建一个以一定间隔运行条件检查方法的程序,但对堆栈溢出的搜索表明,这种方法是可行的。

您可以使用:它允许您以声明方式编程与时间相关的事件,而无需费心处理超时和跟踪。您甚至可以通过以下方式测试设置:


例如,要在某些不活动之后触发事件,可以使用可观察的方法。该方法可以让group在订购x杯饮料后触发事件,等等

根据托管环境,我有几个想法:

  • 如果是您的服务器(虚拟或其他)
  • 创建一个作为windows服务运行的独立应用程序,或一个与webAPI分开处理该进程的windows应用程序

  • 如果在Azure上作为云应用程序运行,您可以创建一个web worker角色,该角色计划每隔这么多分钟运行一次,然后可以查询和处理项目

  • 如果您只有MVC/WebAPI的托管环境,那么您可以研究缓存/回调技巧。当回调方法时,基本上会向缓存中添加一个条目

  • a。创建一个控制器方法,该方法向方法添加带有回调的缓存项

    b。该方法执行它需要执行的任何工作,然后调用控制器操作,以便在缓存中放置另一个条目

    每次缓存超时时,它都会调用回调方法,您可以使用该方法处理信息,然后调用控制器方法重新启动该过程

    当我在做这个实验时,我创建了一个小的调度项目,该项目循环执行一系列任务。每个任务负责确定它们是否需要任何处理。令人惊讶的是,它工作得很好,服务器从不关闭进程

    请记住,如果你在云中托管,这将模拟活动和内存使用,这可能会花费你一些钱,虽然我认为这将是琐碎的

  • 我听说他们正在计划解决方案,甚至可能是一个监控服务,它可以每隔几分钟调用一个WebAPI端点,这与回调方法非常相似。您可以检查是否需要在每次监视服务调用端点时进行处理

  • 一般来说,您描述的内容听起来像是后端任务/职责。你可以考虑这个库FixFieli.IO来安全地从ASP.NET -< /P>执行这个操作。 对于简单的一次性情况,可以使用ASP.NET模拟事件触发的另一种方法是,可以使用内置缓存及其过期事件