Signalr 信号器-在运行时添加集线器

Signalr 信号器-在运行时添加集线器,signalr,signalr-hub,Signalr,Signalr Hub,我有一个正常工作的SignalR应用程序,我的global.asax.cs执行所有常用的MapHubs()等操作,我正在使用一个自定义的IAssemblyLocator,它还加载内存程序集以及引用的程序集。我拥有的两个集线器是在运行时在内存程序集中创建的,这很好用——集线器可以将消息推送到客户端等 在应用程序启动后的某个时刻,我想在运行时添加另一个集线器,它将位于它自己的内存程序集中,并使它出现在signar/hubs/文件中 我该怎么做 再次调用MapHubs会导致错误,因为我已经定义了路由。

我有一个正常工作的SignalR应用程序,我的global.asax.cs执行所有常用的MapHubs()等操作,我正在使用一个自定义的IAssemblyLocator,它还加载内存程序集以及引用的程序集。我拥有的两个集线器是在运行时在内存程序集中创建的,这很好用——集线器可以将消息推送到客户端等

在应用程序启动后的某个时刻,我想在运行时添加另一个集线器,它将位于它自己的内存程序集中,并使它出现在signar/hubs/文件中

我该怎么做

再次调用MapHubs会导致错误,因为我已经定义了路由。到目前为止,删除路由(我只使用RouteTable.Routes.Remove(RouteTable.Routes[0])成功地完成了这项工作,显然并不理想)似乎不起作用


有没有一种很好的方法可以做到这一点?

使用替代语法,而不是使用静态信号器/集线器文件,因为它永远不会更新:


谢谢,我会尝试一下,但我认为问题是,一旦我将新的dll加载到内存中,信号器框架就不知道了。调用GlobalHost.ConnectionManager.GetHubContext()doh过早发送!调用GlobalHost.ConnectionManager.GetHubContext()会导致一个异常,但是如果我手动枚举程序集列表并查看每个程序集中的类型,我可以在其中看到新的集线器类型,看看如何替换这个看起来很像业务的服务。在哪里可以看到默认IHubDescriptorProvider的源代码?我认为每当我尝试使用GetHubContext获取集线器时,该代码都会运行?另外,如果我在这里使用自己的代码,而不使用自动生成的代理,这是否意味着我不再需要调用MapHubs?我意识到这是一个古老的答案,但您能否在此答案中包含一些代码,而不仅仅是一个链接?这是一个潜在的关闭作为一个重复的这一个,但我犹豫,因为这个答案本身可能会被删除作为NAA。