在WebApi和MVC项目之间共享SignalR中心

15
有没有推荐的方法可以在两个应用程序之间共享SignalR Hub?
实际情况是一个面向公众的WebAPI项目和一个内部的MVC WebApp。 我想做的是从WebAPI项目调用SignalR hub上的方法,并将这些方法的结果推送到通过MVC应用程序连接的客户端。
最佳选择是否为创建第三个“Hub”项目,并使两个项目连接到该项目? 如果是这样,那么hub实例是如何管理的?两个应用程序可以从不同的应用程序池(可能是主机)中获得对相同hub的引用吗?
我了解了一些关于GlobalHost.ConnectionManager.GetHubContext的内容,这是否足以获取一个有效的单例hub,供两个应用程序使用?
欢迎任何想法。

signalR支持不同域名的CORS,因此您可以使用一个应用程序为两个应用程序提供服务。附:+1好问题。 - Royi Namir
这是否意味着最好将Hub提取到单独的应用程序中,并让另外两个应用程序调用它?这是我的猜测,因为我无法想到一个好的方法将其放置在现有项目中的任何一个并使它们相互调用。 - dougajmcdonald
请查看以下内容:http://www.asp.net/signalr/overview/performance-and-scaling/scaleout-in-signalr - Royi Namir
有趣的事情,我们的目标是将WebAPI和MVC应用程序部署到Azure,但以VPN / VM的形式,两个站点在同一台虚拟机上运行。我不确定这是否算作单个服务器(希望是),因此我们可能可以避免使用背板方法,但仍需要跨应用程序共享中心枢。 - dougajmcdonald
好的,我可以告诉你,在接下来的几个小时/明天,你会从sR团队成员那里得到比我更丰富的知识和更合适的答案 :-) 我会继续关注这个问题,因为我想听听解决这个问题的最佳实践。 - Royi Namir
@dougajmcdonald,您是否需要在两个应用程序中实现“GlobalHost.DependencyResolver.UseSqlServer()”?我有一个类似的问题,希望您能在这里提供帮助:http://stackoverflow.com/q/29932936/1211604 - Stavros_S
1个回答

4
只需通过SQL Server表设置SignalR消息路由,它将自动连接所有使用相同路由设置的Hubs。无需其他操作,就是魔法。
GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.ConnectionStrings["signalr"].ConnectionString);

你需要以下的NuGet包:Microsoft.AspNet.SignalR.SqlServer。

如果两个应用程序都驻留在同一台机器上,是否需要通过SQL表进行路由?我们的另一个开发人员倾向于仅将SignalR代码移动到WebAPI中通过普通控制器进行连接,并让MVC项目发出标准请求以建立套接字并发送/接收消息。 - dougajmcdonald
同一台机器或同一Web应用程序?如果它们在同一个应用程序中,则不需要DependencyResolver,Hub将是一个实例。否则,如果它们在单独的应用程序池或单独的Web应用程序中,则需要DependencyResolver、SQL或其他。 - Softlion
1
这是我们采用的解决方案,我们的开发人员之一实现了 SQL 后台并将 SignalR 中心代码提取到单独的程序集中,该程序集由 MVC 和 WebAPI 项目共享,效果非常好......但在 SQL Azure 上不行,因为它不受支持 :( - dougajmcdonald
在Azure上,SQL的定价模型是按交易计费的。你会支付很多钱,不是吗? - Softlion
我听说还有一个Redis背板,速度应该会更快。如果您正在使用Azure,则可能还有Azure服务总线。值得一看。http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis - PJUK
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接