【问题标题】:Call SignalR Hub From Another .Net Project从另一个 .Net 项目调用 SignalR Hub
【发布时间】:2020-08-05 01:21:19
【问题描述】:

我在一个 .NetCore 项目中有 SignalR 集线器,在另一个 .NetCore 项目中有 SignalR 客户端(以遵守内部基础架构准则)。我正在努力解决如何实现将提供与集线器的连接的客户端代码。我所有的项目都很好,只是缺少连接部分。

客户项目:

public class MyClientController
    {
        private readonly IHubContext<MyHub, IMyHubClient> _hub;

        public MyClientController(IHubContext<MyHub, IMyHubClient> hub)
        {
            _hub = hub;
            // THIS NEVER GETS CALLED/HIT BECAUSE I DON'T KNOW HOW TO REGISTER IT
            _hub.Clients.All.BroadcastMessage("Notify", $"Hello everyone.  This has been constructed");
        }
}

我猜我需要在Startup.Configure() 方法中进行一些配置?我已经安装了客户端包,

编辑:我添加了以下代码,但它抱怨格式(请记住,这不是相对路径,它在另一个服务中)。

app.UseEndpoints(endpoints =>
{
     endpoints.MapHub<MyHub>("http://localhost:60913/myHub");
}

我在正确的道路上吗?

【问题讨论】:

  • 集线器类和路由必须存在于同一个应用程序上下文中。您不能任意映射到其他一些服务器端点——它会与什么对话?映射意味着“对于这条路径上的所有连接(这个应用程序),用这个集线器类回答”。
  • @NoahStahl...我很确定服务器 A 上的 .Net 客户端可以调用服务器 B 上的 .Net 集线器。除非我失去理智(可能),否则我做了几次同样的事情几年前。

标签: .net-core signalr signalr-hub signalr.client .net-core-3.1


【解决方案1】:

通过将路由映射到您的集线器类来建立连接。 docs have a good example。这包括:

// Add to services collection
services.AddSignalR();
// Map the route "/chathub" to a ChatHub class
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/chathub");
});

顺便说一下,集线器可以是不与控制器关联的独立类。

【讨论】:

  • 我在文档中没有看到。你指的是像 - endpoints.MapControllerRoute(...
  • 好的,但是它如何知道集线器的 URI?
  • 它由相对于基本 URL 的模式定义。 “/chathub”表示客户端将连接到myapp.com/chathub。集线器与控制器是分开的。
  • 集线器在一个项目/服务中,客户端在另一个项目/服务中。它们不存在于同一台服务器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多