C# 超时/结束日期事件的解决方案

C# 超时/结束日期事件的解决方案,c#,asp.net,.net,sql-server,vb.net,C#,Asp.net,.net,Sql Server,Vb.net,希望有人能帮助我找到一个正确的方向来解决我在设计系统时遇到的这个问题 我正在创建一个拍卖网站,其中拍卖有一个特定的结束日期/时间 我有一个.NET计时器,向用户显示剩余时间,当该计时器计数下降时,它会触发一个事件来更新后端SQL数据库,以表示拍卖已完成,它会通知获胜用户并触发一个关闭函数 对于当时未在浏览器中实际打开的拍卖,您建议如何执行此操作,以便计时器事件不会创建此关闭事件 理想情况下,我需要在拍卖结束时运行一些东西 谢谢一个选项是在数据库中存储拍卖项目结束/结束的日期/时间。然后,不要担心

希望有人能帮助我找到一个正确的方向来解决我在设计系统时遇到的这个问题

我正在创建一个拍卖网站,其中拍卖有一个特定的结束日期/时间

我有一个.NET计时器,向用户显示剩余时间,当该计时器计数下降时,它会触发一个事件来更新后端SQL数据库,以表示拍卖已完成,它会通知获胜用户并触发一个关闭函数

对于当时未在浏览器中实际打开的拍卖,您建议如何执行此操作,以便计时器事件不会创建此关闭事件

理想情况下,我需要在拍卖结束时运行一些东西


谢谢

一个选项是在数据库中存储拍卖项目结束/结束的日期/时间。然后,不要担心有什么东西对它的关闭(客户端上的计时器)和更新它的关闭做出反应。决定它关闭的原因很简单,就是现在>关闭日期/时间

编辑:

在下面的评论中,您表示您还需要在拍卖结束时发送邮件。如果是这样,您需要某种后台处理来选择所有已关闭的事件并发送邮件。您仍然可以通过存储日期时间来定义closed。bg处理可以选择现在大于结束日期且处理位为false的所有事件。一旦您选择了它们,就将它们放入持久队列(sql中的表、azure队列等)。然后让后台处理排出队列。当它处理每个项目并发送邮件时,它会在处理时更新事件

您有多个后台处理选项:

  • Windows服务
  • 带线程池的进程内计时器(仅当至少有一个线程池时才执行此操作)
  • Azure中的工作者角色
  • Sql代理作业

  • 编写一个Windows服务,在设定的时间内轮询数据库(我会说比拍卖的最小长度小一点。例如,一天)。该服务将在内存中存储将在该时间内结束的操作,并每秒检查是否有已结束的操作。对于已结束的拍卖,启动关闭事件。

    +1与我的答案不同,我的答案需要服务,此解决方案根本不需要更新任何标志,而是使用业务逻辑指示拍卖已过期。您好@bryanmac,我将拍卖结束的日期/时间存储在我的数据库中,页面上的计时器当前使用此选项。但是如果用户没有打开页面,那么关闭事件将永远不会触发,因此下面关于拍卖结束时windows服务有效监听的答案可能是最好的答案?这会增加很多复杂性、移动部件和延迟,而这些都是您不需要的。相反,只是不更新关闭。存储事件与该事件一起关闭的日期,是否关闭的定义是当前是否超过该日期。例如,当浏览器从服务器读取事件时,页面将显示closed if now>closed data Retrieve。您还可以使服务器拒绝出价等。。。if now>事件的关闭日期。解决方案的另一个变体(如果需要关闭位)是基于关闭日期创建计算列。uber的重点是避免需要“观看”每个事件来更新。我认为这可能是最好的方式,但我需要了解Windows服务是如何工作的。我真的想给中标人发电子邮件,并在拍卖“结束”时结束拍卖,这样我就可以在windows服务检查这些时候运行它了,我希望!在你的问题中,你没有说需要在它关闭时发送电子邮件。如果您需要这样做,那么您需要一些后台工作人员(如windows服务或bg线程)来检查关闭的拍卖。此时,您可以使用这两种方法的组合。+1因为可能需要这两种方法的混合(最初并没有说需要发送邮件)。实际上,不是每秒钟启动一次服务,而是在服务启动时,您可以找到第一次拍卖何时结束,他们会一直等到那时。除非你能够允许用户在拍卖结束时进行更改(我想不会)。你在这里做了什么?答案有用吗?我不得不选择一种稍有不同的方法,因为该网站目前使用的是共享主机解决方案,所以我无法运行服务,所以我正在使用此解决方案。。。但在DoWork部分,我检查auctionEnddate是否为<现在,并从那里开始,向买家和卖家发送电子邮件并关闭拍卖状态。工作非常好,我每30分钟检查一次。