通过ASP.NET设置计划任务的时间

时间:2014-03-11 13:09:05

标签: asp.net web-services email timer scheduled-tasks

我必须解决以下问题。我们每隔两分钟就会收到一份ASMX网络服务。如果十分钟内未请求此服务,则应发送电子邮件。我们希望通过使用计划任务来实现这一点。我们想象它就像这样

1. Creating a scheduled task which will send an email every ten minutes
2. If the service is requested the execution time for the task will be set to ten minutes from now and so the execution time cannot be reached
- If the service is not requested the execution time will be reached and the email is sent

有没有办法在ASP.NET中解决这个问题,还是有更好的解决方案?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

您可能需要查看Revalee开源项目。

您可以使用它在特定时间安排网络回调。在您的情况下,您可以在每次使用Web服务时安排Web回调(将来10分钟)。当您的Web服务收到回调时,它可以确定该服务是否最近已被使用。如果Web服务已处于活动状态,则忽略回调;如果Web服务处于非活动状态,则可以发送电子邮件消息。

例如,使用Revalee,您可以:

  1. 在您的应用程序启动时注册未来(从现在起10分钟)回调。

    private DateTimeOffet? lastActive = null;
    
    private void ScheduleTenMinuteCallback()
    {
        // Schedule your callback 10 minutes from now
        DateTimeOffset callbackTime = DateTimeOffset.Now.AddMinutes(10.0);
    
        // Your web service's Uri
        Uri callbackUrl = new Uri("http://yourwebservice.com/ScheduledCallback/YourActivityMonitor");
    
        // Register the callback request with the Revalee service
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
    }
    
  2. 无论何时使用您的网络服务,您都会注册另一个回调存储日期&您的服务作为全球价值活跃的时间。

    lastActive = DateTimeOffset.Now;
    
    ScheduleTenMinuteCallback();
    
  3. 最后,当网络计划任务激活并重新调用您的应用程序时,您将测试全局的值

    private void YourActivityMonitor()
    {
        if (!lastActive.HasValue || lastActive.Value <= DateTimeOffset.Now.AddMinutes(-10.0))
        {
            // Send your "10 minutes has elapsed" email message
        }
    }
    
  4. 我希望这会有所帮助。

    免责声明:我是参与Revalee项目的开发人员之一。但需要明确的是,Revalee是免费的开源软件。源代码可在GitHub上找到。