【问题标题】:How can I bridge AspNetCore SignalR 1.0.0 alpha2 and SignalR 2.2.2如何桥接 AspNetCore SignalR 1.0.0 alpha2 和 SignalR 2.2.2
【发布时间】:2018-07-03 13:41:28
【问题描述】:

我正在使用 SignalR 1.0.0-alpha2-final 和 Angular 5 尝试使用 ASP.NET Core(针对 4.6.1 框架)来尝试使用 SPA 技术重写我们的应用程序。

我有几个使用 .NET 4.6.1 框架编写的计算服务,我别无选择,只能使用 SignalR 2.2.2 来托管集线器。

由于 ASP.NET Core SignalR Client 与 SignalR 2.2.2 集线器不兼容,我想在 ASP.NET Core 中间件中以服务的形式编写两者之间的桥梁。 .

原理如下:

  • 我的计算服务托管一个 SignalR 2.2.2 集线器,将消息发送到使用 SignalR 2.2.2 客户端的中间件
  • 中间件既是 SignalR 2.2.2 客户端,又是 SignalR 1.0.0-alpha2-final 集线器的主机,用于接收来自计算服务的信号并使用 SignalR 和 Angular 将它们发送到客户端。

private readonly IHubContext<HubForSignalR100> _hub;

public BridgeService(IHubContext<HubForSignalR100> hubContext) {
    // hub contexts for the SignalR 1.0.0 clients
    _hub = hubContext;

    // Hub connection to the service that host signalr 2.2.2
    var cn = new HubConnection(urlToTheCalcService);
    var hub = cn.CreateHubProxy("CalculationServiceHub");

    // When the calculation service send a signalr 2.2.2 event, it is resent to the signalr 1.0.0 clients
    hub.On<CalculationData>("CalculationEvent", async data => {
        await _hub.Clients.All.InvokeAsync("CalculationEvent", data);
    });
    cli.Start().Wait();
}

因为我有很多计算服务,我不想映射每条消息,我想让它更透明,比如

    hub.On(async (eventName, data) => {
        await _hub.Clients.All.InvokeAsync(eventName, data);
    });

不幸的是,我在 SignalR apis 中找不到任何与这种方法相似的东西。如何以透明的方式将 ASP.NET 核心 SignalR 与 SignalR 2.2.2 连接起来?

【问题讨论】:

    标签: angular asp.net-core signalr asp.net-core-signalr


    【解决方案1】:

    好的...在这个阶段可能没有办法执行此操作。 所以我为推送通知保留了 SignalR,最后我在 MiddleWare 和我的计算服务之间使用了 MassTransit 和 RabbitMQ。

    【讨论】:

      猜你喜欢
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      相关资源
      最近更新 更多