我正在尝试找到什么是正确的设计,客户端将打开2个会话,其中一个用于上传大文件,另一个用于提供SignalR消息。目标是当服务器处理大文件时,它需要向SignalR通道提供状态消息,以便客户端在上载期间和之后通知服务器上发生的进程。假设在上传时,客户端将提供SignalR标识符,以便处理文件上载的工作人员可以将其传递给Hub,但我真正不确定的是上传工作者应该如何与Hub连接。我是否维护一个静态单例类,该类包含对集线器的持久引用?或者我只是创建一个新的HTTP会话并通过环回发送?或者是否有一种我甚至没有想到的更好的方法?
答案 0 :(得分:1)
您可以使用依赖注入来获取对集线器的引用;
public class UploadController
{
IHubContext<YourHub> _hub;
public UploadController(IHubContext<YourHub> hub)
{
_hub = hub;
}
public ActionResult Upload(SomeFile model)
{
// start upload processing
// send progress updates
var conectionId = DetermineConnectionId(); // store it in a dictionary maybe?
_hub.Clients.Client(connectionId).SendProgressUpdate();
}
}