Long 运行 Ajax 请求阻塞 short Ajax 状态更新
Long running Ajax request blocking short Ajax status updates
我在 IIS 上有一个 ASP.NET MVC 应用程序 运行ning。我有以下处理程序 /DoWork(假设需要 10 分钟)和 /ReportStatus(假设需要 <1s)。 DoWork 执行工作,而 ReportStatus return 显示工作进度。
我想通过 运行ning $.ajax 来自 Javascript 的请求异步 运行 /DoWork,然后通过重复查询 / 监控其进度ReportStatus 也通过异步的 $.ajax 封装在 window.setInterval 中注册的函数中。但是,我看到的是 /DoWork 上的长 运行ning $.ajax 阻止了 /ReportStatus 上的所有其他查询,直到 DoWork 完成。
我该如何避免这种情况?我猜想这与 IIS 服务器设置可能拒绝来自一台主机的两个活动请求有关?有什么想法吗?
我的第一个想法是让 /DoWork 运行 在后台异步线程中实际工作并立即 return。但是我想知道是否有更好的选择,因为我想在 /DoWork 运行.
期间保持连接打开
最终按照 colecmc 的建议使用了 WebSockets。由于我不想依赖 Windows 8+ / Windows 2012+,我选择了名为 Fleck 的轻量级实现(在 Nuget 上可用)。
我在 IIS 上有一个 ASP.NET MVC 应用程序 运行ning。我有以下处理程序 /DoWork(假设需要 10 分钟)和 /ReportStatus(假设需要 <1s)。 DoWork 执行工作,而 ReportStatus return 显示工作进度。
我想通过 运行ning $.ajax 来自 Javascript 的请求异步 运行 /DoWork,然后通过重复查询 / 监控其进度ReportStatus 也通过异步的 $.ajax 封装在 window.setInterval 中注册的函数中。但是,我看到的是 /DoWork 上的长 运行ning $.ajax 阻止了 /ReportStatus 上的所有其他查询,直到 DoWork 完成。
我该如何避免这种情况?我猜想这与 IIS 服务器设置可能拒绝来自一台主机的两个活动请求有关?有什么想法吗?
我的第一个想法是让 /DoWork 运行 在后台异步线程中实际工作并立即 return。但是我想知道是否有更好的选择,因为我想在 /DoWork 运行.
期间保持连接打开最终按照 colecmc 的建议使用了 WebSockets。由于我不想依赖 Windows 8+ / Windows 2012+,我选择了名为 Fleck 的轻量级实现(在 Nuget 上可用)。