【发布时间】:2019-07-14 11:45:20
【问题描述】:
我在服务器端有一个带有 AspNetCore 2.1 Web Api 的 angular 4 应用程序(用于安静的服务)。应用程序托管在 Azure 应用服务中。 应用程序具有以 excel 格式导出数据的功能。 excel 中预计会有超过 100k 行。Azure 应用服务的超时限制为 3.8 分钟。如果请求超过 3.8 分钟,Azure 负载均衡器将取消请求,用户经常会收到错误消息。 为了解决这个问题,我决定将此任务移至后台进程,并将使用 SingalR 向用户提供更新,直到时间任务完成。申请流程如下
- 用户点击导出到 Excel 按钮。
- AspNetCore API 将处理此调用并将请求放入 Azure 主题中。
- Azure 函数将订阅 Azure 主题,一旦收到通知,它将开始处理数据。它将从 Azure SQL 获取数据。
- Azure 函数将定期与 SignalR 集线器讨论任务的进度。 SignalR 集线器将向客户端推送通知。客户将收到此通知,用户将了解任务的进度。
- 一旦数据准备好,Azure 函数将准备 excel 并将其发送到 SignalR 集线器。 SignalR 集线器会将此文件推送到客户端。
我不确定这是否是正确的方法。根据microsoft docs,应该避免长时间运行的功能。 我也读过 SignalR 应该避免推送文件。
是否有更好的解决方案来实现该功能,即在后台进程中将数据导出到 excel 并在准备好后将其推送到客户端
【问题讨论】:
标签: asp.net-core signalr azure-functions asp.net-core-webapi azure-app-service-envrmnt