背景:
这是我的项目:在 ASP.NET MVC4 Web 应用程序上,用户输入信息并发布到服务器。然后服务器开始运行一个长任务(从不到一秒到 20 分钟不等。通常大约 4 分钟。)
我不希望所有工作都发生在 Controller 操作中,否则用户将不得不等待它完成而没有关于正在发生的事情的反馈。所以我想将用户发送到状态页面并将服务器的更新发送到该页面。
当前部分解决方案:
到目前为止,这是我所拥有的:控制器使用长时间运行的操作启动一个任务,然后将用户引导到状态页面。当任务运行时,它会使用 SignalR 将消息发送回状态页面,并且页面会更新。
问题:
- SingalR 正在更新所有客户端,因此多个用户不能同时使用此应用程序。我看到 SignalR 可以向特定客户端发送消息,但是如何将客户端 ID 获取到控制器?SignalR 使访问会话变得困难(不可能?)。
- 如果任务在状态页面加载之前完成怎么办(或者如果在页面加载时更新之间存在暂停怎么办?)状态页面将没有关于任务的任何信息。同样,将状态存储在会话中会很好,但我似乎无法做到这一点。
有没有办法让 SignalR 和 ASP.NET 同步客户端状态?SignalR 是适合这项工作的工具吗?