【发布时间】: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