【问题标题】:Create an Excel file in background then email it to the user在后台创建一个 Excel 文件,然后通过电子邮件将其发送给用户
【发布时间】:2018-02-01 00:09:30
【问题描述】:

我有一个用ASP.NET 4.0 编写的 Intranet 应用程序,可以生成 Excel 报告。某些报告最多可能需要 2 分钟才能创建。

这里的问题是用户在等待报告完成时无法继续工作。

我想做的是:

  1. 用户要求服务器生成报告
  2. 服务器启动报告并输出一条消息,说明 报告将在准备好后通过电子邮件发送给他。
  3. 当服务器处理报告时,用户可以继续 使用内网
  4. 报告准备好后,服务器将 Excel 文件保存在 文件夹并将文件的链接通过电子邮件发送给用户

明确地说,我知道如何从 .NET 代码生成 Excel 文件。我不知道如何在后台创建它。

我该怎么做?

【问题讨论】:

  • 在 Google 上搜索要写入 Excel 文件的库。有几个。
  • 据我了解,问题不在于创建 excel 文件,而是需要在后台任务中创建
  • 完全正确
  • 您可能想查看 Hanselman 先生的博客。它提供了一个有用的 szenarios 列表,可能会解决您的问题。 hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx
  • 请记住,Hanselman 的博客提供了有关如何在网络服务器中执行此操作的建议。但是,在 Web 服务器上执行此操作通常不是您想要执行的操作。您通常希望在单独的应用程序中执行此操作,例如 Windows 服务或 Azure 函数。 Hanselman 建议的一些技术(例如 Hangfire)可用于 Windows 服务。或者您可以通过 Web API 或消息队列等进行通信。

标签: c# asp.net


【解决方案1】:

我认为您的方案的最佳解决方案是使用 AJAX 调用。

  1. 在您的 ASP.NET 上创建 WEBAPI 方法以生成 Excel 文件并将其通过电子邮件发送给用户

    [HttpGet]
    public void CreateExcelFile( )
    {
       1.create report
       2.save to disk
       3.call private method to attach the file to email message and send to recipient
    
    }
    
  2. 在您的应用程序网页中调用该方法

    $.ajax({
    method: "GET",
    url: "./api/yourcontroller/CreateExcelFile",
    
    })
    .done(function (msg) {
     //do something ???
    }).error(function (xhr, ajaxOptions, thrownError) {
     //catch error if any
    });
    

AJAX 本质上是异步的。这样您的用户将能够继续使用您的应用程序。如果您正在寻找一个好的 Excel 创建库,我建议您在 Nuget 上找到 EPPlus。它是免费且非常强大的产品

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2019-07-26
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多