在虚拟主机中发送自动报告的方法

本文关键字:报告 方法 虚拟主机 | 更新日期: 2023-09-27 17:57:13

我有在Visual Studio 2010中创建的Web项目,并使用SQL Server 2008 R2用于数据库,通常,我使用 SQL Server 代理将报告(从 SQL 数据库)发送到我的客户电子邮件,现在我想将我的应用程序移动到其他 Web 托管。我的问题有什么方法可以在虚拟主机中按计划自动生成报告并发送到电子邮件?

谢谢你的建议。

在虚拟主机中发送自动报告的方法

使用 Revalee 开源项目可以在 Web 项目中调度任务。

Revalee 是一项服务,允许您安排对 Web 应用程序的 Web 回调。在您的情况下,您将安排一个回调,以生成您的报告并自动发送电子邮件。Revalee 非常适合作为离散事务操作的任务,例如更新数据库值或发送自动电子邮件(阅读:不长时间运行)。用于生成报表和发送电子邮件的代码将驻留在 Web 应用中。更具体地说,在 Revalee 将在您预定时间调用的目标网页上。当您的应用程序首次启动时,您将安排第一次 Web 回调。当回调应用程序以生成报告时,您将计划下一次回调。

要使用 Revalee,您需要:

  1. 在您的服务器上安装 Revalee 服务,即 Windows 服务。Windows服务以源代码(您可以自己编译)或Revalee网站(上文)提供的预编译版本提供。

  2. 在 Visual Studio 项目中使用 Revalee 客户端库。客户端库在源代码(同样,你可以自己编译)或通过 NuGet 提供的预编译版本中提供。

  3. 当应用程序通过 ScheduleMidnightCallback() 方法启动时,您将注册将来的回调(例如,在特定时间)(见下文)。

    private DateTimeOffet? previousCallbackTime = null;
    private void ScheduleMidnightCallback()
    {
        // Schedule your callback for midnight tomorrow
        var tomorrow = DateTimeOffset.Now.AddDays(1.0);
        var callbackTime = new DateTimeOffset(tomorrow.Year, 
                                              tomorrow.Month, 
                                              tomorrow.Day, 
                                              0,    // Hour 
                                              0,    // Minute 
                                              0,    // Second 
                                              tomorrow.Offset);
        // Your web service's Uri, including any query string parameters your app might need
        Uri callbackUrl = new Uri("http://yourwebapp.com/Callback.aspx");
        // Register the callback request with the Revalee service
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
        previousCallbackTime = callbackTime;
    }
    
  4. 当 Web 计划任务激活并回调应用程序时,您会在午夜执行需要执行的任何操作,并计划下一次回调。为此,请将以下方法调用 ( CallbackMonitor() ) 添加到Callback.aspx页处理程序。

    private DateTimeOffset? mostRecentCallback = null;
    private void CallbackMonitor()
    {
        var midnight = new DateTimeOffset(DateTimeOffset.Now.Year, 
                                          DateTimeOffset.Now.Month, 
                                          DateTimeOffset.Now.Day, 
                                          0,              // Hour 
                                          0,              // Minute 
                                          0,              // Second 
                                          DateTimeOffset.Now.Offset);
        if (!mostRecentCallback.HasValue 
            || mostRecentCallback.Value < midnight)
        {
            mostRecentCallback = midnight;
            // Perform your report generation & send email-related tasks
            // ...do your work here...
            // Schedule subsequent callback
            ScheduleMidnightCallback();
        }
    }
    

我希望这有所帮助。

最后一件事:Revalee也有一个 ASP.NET MVC特定的库,以防您将Web应用程序从 ASP.NET 迁移到 ASP.NET MVC。

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