如何连接AspNetCore SignalR 1.0.0 alpha2和SignalR 2.2.2

时间:2018-01-24 13:30:38

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

我正在使用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核心中间件中以服务的形式在两者之间编写桥梁。

原则如下:

  • 我的计算服务主持一个SignalR 2.2.2集线器向中间件发送消息,该中间件使用SignalR 2.2.2客户端
  • 中间件既是SignalR 2.2.2客户端又是SignalR 1.0.0-alpha2-final集线器的主机,用于接收来自计算服务的信号,并使用带有Angular的SignalR将它们发送到客户端。
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联系起来?

1 个答案:

答案 0 :(得分:1)

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