0

我的要求是将报告安排在特定的时间和频率,即每周、每月或每天。

该报告应在指定时间邮寄,并附上预定的附件。

提前致谢

4

2 回答 2

2

有一个很棒的框架叫做 Hangfire,你可以用它来安排 .net 中的任务:

http://hangfire.io/

您需要创建运行报告和发送电子邮件的方法,但您可以使用 hangfire 框架轻松安排该任务。

有关其他替代方案,请查看 Hanselman 的此博客条目:http ://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

于 2014-12-02T06:28:06.383 回答
0

您可以使用Revalee开源项目从您的 ASP.NET 项目中安排任务。

Revalee 是一项服务,可让您安排 Web 回调到您的 Web 应用程序。在您的情况下,您将安排一个回调,以便在特定时间同步您的数据。Revalee 非常适用于离散事务操作的任务,例如更新一些数据库值或发送自动电子邮件消息(阅读:不长时间运行)。执行您的操作的代码都将驻留在您的应用程序中。

要使用 Revalee,您将:

  1. 在您的服务器上安装 Revalee 服务,这是一项 Windows 服务。Windows 服务在源代码(您将自己编译)、Revalee 网站上提供的预编译版本或通过Chocolatey提供。

  2. 在 Visual Studio 项目中使用 Revalee 客户端库。(也有一个特定于 MVC 的版本。)客户端库在源代码中提供(同样,您将自己编译)或通过NuGet提供的预编译版本。

  3. 当您的代码调用该ScheduleReportTransmission()方法时,您将注册一个未来的回调(此示例假设您需要您的操作在 12 小时后运行,但它可以是任何日期和时间)。

    Private Sub ScheduleReportTransmission()
    
        Dim callbackTime As DateTimeOffset = DateTimeOffset.Now.AddHours(12.0)
    
        ' The callback should be 12 hours from now
        Dim callbackUrl As New Uri("http://mywebapp.com/TransmitReport.aspx")
    
        ' Register the callback request with the Revalee service
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl)
    
    End Sub
    
  4. 当 Revalee 回调您的应用程序时,您的应用程序将执行您编写的任何操作。您可以通过将以下方法调用 ( TransmitReport()) 添加到您的TransmitReport.aspx页面处理程序来执行此操作,à la:

    Private Sub TransmitReport()
    
        ' TODO Lookup the report information and send the email
        ' ...
    
        Return
    
    End Sub
    

我希望这有帮助。

注意:上面的代码示例使用的是同步版本ScheduleCallback(),Revalee 客户端库也支持异步调用 à la:

RevaleeRegistrar.ScheduleCallbackAsync(callbackTime, callbackUrl)

如果上面不清楚,Revalee 服务不是外部 3rd 方在线调度程序服务,而是您在自己的网络上安装和完全控制的 Windows 服务。它驻留在您自己选择的服务器上并在其中运行,很可能是您的 Web 服务器(但这不是必需的),它可以在其中接收来自您的 ASP.NET 应用程序的回调注册请求。

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

于 2014-12-03T14:54:12.330 回答