我需要提供调度的行动/活动,在我们的网站。废话的类比可能是一个日历系统,其中一个人增加了一个日历中的项目和当的日期/时间已经打,然后一些逻辑(例如计算的一份报告)是解雇。

我可能有数百乃至成千上万的定的事件,都进入了我的客户。当客户进入的东西来获得计划,我将保存这些信息的数据库。然后我猜我会加入一个活动/工作的地方,其中将包含的数据库表主键。当事件是被解雇了,我会抓住这一信息的数据库,然后做的逻辑。完成。

什么是一些共同的解决办法来处理这个吗?

我使用。净3.5SP1.DB Sql服务器2008年。UI将基于网络。

我不知道如果人们使用内容的?或者什么建成Sql服务器?或者一些开放源图书馆(例如。 Quartz.NET)与NT服务。服务器将windows2008年的标准版本。

-请不建议使用一个计划的工作相当于或任何命令行的脚本,等等。

最后,这是一个次级目标..我想把这个扔到azure句和笑声...所以是也可能吗?这只是一个愿望清单的想法。我宁愿做一个专门框如果解决方案更容易,比使用蔚蓝。

干杯:)

编辑:逻辑处理事件时需要被解雇了,是背景的工作。没有用户界面的需要。

有帮助吗?

解决方案

Quartz.NET可能也可以很好地处理这些要求。我看到的好处是以各种方式设置调度程序(CronTrigger +日历)以及将您的工作分成小部分可测试代码(作业)的能力。

Quartz.NET还为您提供所需的分发和故障转移功能以及群集功能。一个不错的功能还是每触发可配置的失火处理设置,使您有机会对失火和调度程序停机时间作出反应。

SQL Service Broker似乎没有轮询的好处,我想知道这是否会成为问题,但是经纪人的缺点是听起来有点复杂(至少从我上面的描述中可以看出)。

只是我偏向0.02美元。

其他提示

Workflow Foundation 可以做到这一点。使用延迟活动,将TimeSpan设置为(DesiredTimeOfExecution - Now) 。对于较大规模的系统,将UnloadOnIdle设置为true,待处理的工作流将持续存在直到需要。

这是一个非常简单的延迟活动示例

WF是 Free ,作为.NET Framework 3.0的一部分提供。

您想要的是SQL Server Service Broker。

您可以进行定时数据库访问以查询日历数据等。它基于消息,比MSMQ更强大,不需要轮询,并且可以在分布式环境中使用(如果这是您需要的)。对我来说很棒!

您将点击存储过程将事件信息放在db中的SSB队列中。您将在未来给该消息一段时间唤醒并处理另一个存储过程,该存储过程抓取您的事件数据并放入执行“外部激活”的拾取队列。 EA向指向控制台应用程序的Windows服务发送通知。该控制台应用程序从拾取队列中获取事件信息。现在,您可以在您想要的精确时间获得事件数据。无论你喜欢在控制台应用程序中处理它。

有一个学习曲线,但如果您需要SQL Service Broker提供的可靠性,灵活性和可伸缩性,那么它非常值得。以下是一些帮助您入门的链接。

以下是对比: SQL Service Broker vs. MSMQ

不幸的是,只允许我发布一个链接。否则,我可以为您提供更多资源,帮助您开始使用SSB。

希望这有帮助!

一个选项可能是创建一个SQL作业,以便以最细微的间隔运行,然后处理所有事件。

如果你想要最好的.NET和SQL Server世界,你可以也使用SQL作业并调用托管代码。我对此解决方案没有任何经验,所以如果我提供的资源不是很透彻,我会在前面道歉。

如果任务非常复杂,并且您不想在SQL Server上加载程序集,或者您只是不喜欢他们的调度系统,那么我建议使用带有第三方调度程序插件的.NET Windows服务。就个人而言,如果所有代码都可以保存在存储过程或一系列存储过程中,那么我就会找到工作,因为我觉得管理起来要容易得多,而且已经为你做了很多工作。

修改

我刚刚注意到一条解释粒度的评论。如果您需要每分钟执行一些操作,那么.NET服务解决方案可能会更容易,因为您可能必须实现某种多线程解决方案。

您需要一个作业调度程序和一个作业管理器,因为您的粒度很小,并且您必须能够先验地知道在给定时间内发生的所有作业是否会在下一分钟完成。

这使得调度程序的工作变得容易。您应该有一个存储作业的数据库表,并且每分钟都有一个作业调度程序服务转到该表并选择需要完成的作业。

它会将这些工作排入职位经理。您可以使用另一个表或事务性队列来排队作业。您的作业管理器服务将监视作业队列。您可以自己动手或使用 BizTalk 来监控作业队列和启动业务流程或工作流程。它会逐个将任务从队列中拉出来,执行任务并更新数据库中作业的状态。

您的问题将是可扩展性,具体取决于用户数量,排队任务数量以及每项任务的密集程度(时间,内存,CPU等)。如果我是你,我会推迟1分钟的时间粒度并将其推到5分钟。下午1点38分你需要做什么你不能等到下午1点40分。对于? :)

这已经是StackOverflow上讨论的问题了。请通过需要在asp.net中找到作业调度程序

您忘记在问题中添加最重要的信息 - ASP.Net

它描述了ASp.Net Web应用程序的调度程序框架,它可以像服务一样运行,并为您提供定期调用的方法,然后您可以触发逻辑加载事件,使用计时器对有效事件进行排队。

此外,这是所有替代品中最便宜的。希望这是你需要的。

它取决于一位性质的系统。工作从假定的完整定义的事件是存储在数据库:

  • 如果事件需要引起一些东西在一个网络UI,在更新的检查表的项目已经发生',并添加适当的视觉指标/屏幕/弹窗以下网请求输出。
  • 如果你的事件涉及背景的处理,最简单的解决办法是编写一个单独的立场。净的应用程序,查询数据库的事件表新记录,并检查时看到事件的发生。你可以去花哨的以及涉及穿如果某些事件导致长期运行的进程,等等。但是,这将基本设计。(仅使用穿如果你要...一个简单的单一程序,调查表将是最强大的)
  

然后我猜我会在某处添加一个事件/作业,它将包含数据库表主键。当事件被触发时,我将从数据库中获取该信息,然后执行逻辑。

我不知道常见的解决方案是什么,但是,重新发明轮子,我想到在事件时间创建一个数据库聚簇索引,所以我可以每分钟轮询一次数据库,如...

SELECT * FROM Events WHERE Events.Time < next_minute
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top