如何桥接 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 中以服务的形式中间件。 .
原理如下:
- 我的计算服务托管一个 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 api 中找到任何看起来接近这种方法的东西。如何以透明方式桥接 ASP.NET 核心 SignalR 与 SignalR 2.2.2?
好的...现阶段可能无法执行此操作。
因此,我为推送通知保留了 SignalR,最后我在中间件和计算服务之间使用了 MassTransit 和 RabbitMQ。
我正在试验 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 中以服务的形式中间件。 .
原理如下:
- 我的计算服务托管一个 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 api 中找到任何看起来接近这种方法的东西。如何以透明方式桥接 ASP.NET 核心 SignalR 与 SignalR 2.2.2?
好的...现阶段可能无法执行此操作。 因此,我为推送通知保留了 SignalR,最后我在中间件和计算服务之间使用了 MassTransit 和 RabbitMQ。