如何桥接 AspNetCore SignalR 1.0.0 alpha2 和 SignalR 2.2.2

How can I bridge AspNetCore SignalR 1.0.0 alpha2 and SignalR 2.2.2

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

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

因为 ASP.NET Core SignalR Client 与 SignalR 2.2.2 hubs 不兼容,我想在两者之间写一个桥梁,在 ASP.NET Core 中以服务的形式中间件。 .

原理如下:


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 api 中找到任何看起来接近这种方法的东西。如何以透明方式桥接 ASP.NET 核心 SignalR 与 SignalR 2.2.2?

好的...现阶段可能无法执行此操作。 因此,我为推送通知保留了 SignalR,最后我在中间件和计算服务之间使用了 MassTransit 和 RabbitMQ。