【问题标题】:Sharing a SignalR hub between a WebApi and MVC project在 WebApi 和 MVC 项目之间共享 SignalR 集线器
【发布时间】:2013-09-11 02:35:42
【问题描述】:

是否有在两个应用程序之间共享 SignalR 集线器的推荐方法?

实际情况是一个面向公众的WebAPI项目和一个内部的MVC WebApp。我想做的是从 WebAPI 项目调用 SignalR 集线器上的方法,并将这些方法的结果推送到通过 MVC 应用程序连接的客户端。

最好的选择是创建第三个“Hub”项目并让两个项目都连接到该项目吗?如果是这样,如何管理中心实例?两个应用程序能否从不同的应用程序池(也可能是主机)获取对同一个中心的引用?

我阅读了一些关于 GlobalHost.ConnectionManager.GetHubContext 的信息,这是否足以获得两个应用程序都可以使用的有效单例集线器?

任何想法都非常感谢。

【问题讨论】:

  • signalR 在不同的域中支持 CORS,因此您可以使用 1 个应用程序同时为两个应用程序提供服务。 +1 好问题。
  • 这是否意味着最好将 Hub 提取到一个单独的应用程序中并让其他两个应用程序调用它?这是我的怀疑,因为我想不出一种很好的方法来将它放在任何一个现有项目中并让它们相互调用。
  • 有趣的东西,我们的目标是将 WebAPI 和 MVC 应用程序部署到 Azure,但采用 VPN/VM 的形式,两个站点都运行在同一个 VM 上。我不能 100% 确定这是否算作单个服务器(希望可以),因此我们可以避免使用背板方法,但仍需要跨应用共享集线器。
  • 好吧,我可以告诉你,在接下来的几个小时/明天你会从 sR 团队成员那里得到更合适的答案,他们比我有更多的知识 :-) 我会继续跟踪这个问题因为我想听听该问题的最佳做法。

标签: asp.net-web-api signalr signalr-hub


【解决方案1】:

只需通过 SQL Server 表设置信号器消息路由。它将使用相同的路由设置自动连接所有集线器。无事可做,这很神奇。

GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.ConnectionStrings["signalr"].ConnectionString);

您将需要以下 nuget 包:Microsoft.AspNet.SignalR.SqlServer

【讨论】:

  • 如果两个应用程序都驻留在同一台机器上,是否需要通过 SQL 表进行路由?我们的其他开发人员之一倾向于通过普通控制器将信号器代码移动到 webapi,并让 MVC 项目发出标准请求来连接、建立套接字和发送/接收消息
  • 同一台机器或同一网络应用程序?如果它们在同一个应用程序中,那么您不需要依赖解析器,集线器将是一个实例。否则,如果它们位于单独的应用程序池或单独的 Web 应用程序中,那么您将需要依赖解析器、SQL 或任何其他。
  • 它们将是不同的应用程序,根据问题,一个 WebAPI 和一个 MVC,但在同一台机器上,我认为需要依赖解析器
  • 是的。它们将无法通信,因为它们不共享相同的内存地址空间。他们是孤立的。
  • 这是我们寻求的解决方案,我们的一位开发人员实现了 SQL 背板,我们将 SignalR 集线器代码提取到 MVC 和 WebAPI 项目共享的单独程序集中,工作得很好......除非在 SQL Azure 上,因为它不受支持:(
猜你喜欢
  • 2014-02-26
  • 2017-07-16
  • 2014-01-05
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 2014-08-11
  • 2013-04-12
  • 2019-03-29
相关资源
最近更新 更多