Asp.net core 在Aspnet Core 2.1 Azure应用程序服务中长时间运行导出到excel作业

Asp.net core 在Aspnet Core 2.1 Azure应用程序服务中长时间运行导出到excel作业,asp.net-core,signalr,azure-functions,asp.net-core-webapi,azure-app-service-envrmnt,Asp.net Core,Signalr,Azure Functions,Asp.net Core Webapi,Azure App Service Envrmnt,我有一个angular 4应用程序,服务器端有AspNetCore 2.1 Web Api(用于restful服务)。应用程序托管在Azure应用程序服务中。 应用程序具有以excel格式导出数据的功能。excel中的行数应超过10万行。Azure应用程序服务的超时限制为3.8分钟。如果请求超过3.8分钟,Azure load balancer将取消请求,用户通常会收到错误。 为了解决这个问题,我决定将此任务移动到后台进程,并将使用SingalR向用户提供更新,直到任务完成。应用程序的流程如下所

我有一个angular 4应用程序,服务器端有AspNetCore 2.1 Web Api(用于restful服务)。应用程序托管在Azure应用程序服务中。 应用程序具有以excel格式导出数据的功能。excel中的行数应超过10万行。Azure应用程序服务的超时限制为3.8分钟。如果请求超过3.8分钟,Azure load balancer将取消请求,用户通常会收到错误。 为了解决这个问题,我决定将此任务移动到后台进程,并将使用SingalR向用户提供更新,直到任务完成。应用程序的流程如下所示

  • 用户单击“导出到excel”按钮
  • AspNetCore API将处理此调用并将请求放入Azure主题中
  • Azure函数将订阅Azure主题,一旦收到通知,它将开始处理数据。它将从Azure SQL获取数据
  • Azure函数将定期与SignalR hub讨论任务的进度。SignalR hub将向客户端推送通知。客户端将收到此通知,用户将了解任务的进度
  • 一旦数据准备就绪,Azure函数将准备excel并将其发送到SignalR hub。SignalR hub将此文件推送到客户端
  • 我不确定这是否是正确的方法。根据,应该避免长时间运行的函数。 此外,我读信号器应避免推送文件

    是否有更好的解决方案来实现该功能,即在后台过程中将数据导出到excel,并在准备就绪后将其推送到客户端

    在后台进程中将数据导出到excel,并在准备就绪后将其推送到客户端

    您可以尝试使用或使用,以便可以长期运行以将数据导出到excel并将其存储在存储blob中

    网站运行时,关联的作业正在运行。您可以在webjob中使用queueTrigger或httpTrigger,并从网站调用webjob。一般来说,我们必须强制Azure网站始终处于打开状态。转到Azure网站应用程序设置并打开
    始终打开


    正如您所指出的:信号器用于实时消息,而不是上传文件。所以您可以使用这种方法将文件上传到客户端。

    通常在这种情况下,我们为客户提供近实时的解决方案。 您可以采取哪些措施来解决此问题:

    1) 单击按钮以导出用户数据(包含100K行或更多行的excel文件)

    2) 通知用户,用户导出请求已提交

    3) 还添加了一个刷新按钮功能,该功能将获取文件导出的状态

    4) 在后台有一个web作业,它将处理您的文件并将处理后的文件上载到azure存储中,可能是在blob中

    5) blob文件可用后,将状态更新为“已完成”

    6) 提供一个启用链接的选项来下载文件,该文件将是blob的端点url

    这样,主线程就不会被锁定,屏幕也会有响应

    如果您不想使用“刷新”按钮功能来继续检查报告,可以利用signalR保持连接活动,并设置一个定时选项来继续检查blob文件。一旦文件在blob中可用,只需更新标签即可

    希望能有帮助