我在我的Startup.cs
中添加了以下代码,以添加天蓝色的signalR服务。
services.AddSignalR().AddAzureSignalR(options =>
{
options.ConnectionString = URL_TO_SIGNALR_SERVICE;
});
app.UseAzureSignalR(options => {
options.MapHub<SignalRHub>("/signalRRoute");
});
这是我的SignalRHub.cs
代码
public class SignalRHub : Hub
{
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
logger.LogInformation($"{Context.ConnectionId} is Connected.");
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
logger.LogInformation($"{Context.ConnectionId} is Disconnected.");
}
public async void Execute(Model model)
{
logger.LogInformation($"{Context.ConnectionId} invoked Execute");
try
{
var data = await completeExecuteRequest(model);
Context.clients.Client(Context.ConnectionId).SendAsync("resultMethod", data);
}
catch (Exception e)
{
Context.clients.Client(Context.ConnectionId).SendAsync("errorMethod", e.Message);
}
}
}
这已部署到Azure中的App Service
。
App服务具有多个插槽,因此我们为每个插槽使用不同的路由,例如/signalRRouteDev
/signalRRouteTest
等。
但是,连接仍在多路复用。例如,test
插槽客户端应在Execute
服务器上使用test
方法。相反,它看起来非常随机,并且在任何插槽上都命中了Execute
方法。
当我使用诸如SignalRHubDev:Hub
SignalRHubTest:Hub
之类的不同类名时,该连接会命中正确的服务器。
我想在所有插槽中使用相同的类名SignalRHub
,并让客户端与正确的服务器通信。