我正在使用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核心中间件中以服务的形式在两者之间编写桥梁。
原则如下:
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联系起来?
答案 0 :(得分:1)
好的......在这个阶段可能无法执行此操作。 所以我保留SignalR用于推送通知,最后我在我的MiddleWare和我的计算服务之间使用MassTransit和RabbitMQ。