У меня есть основное веб-приложение ASP.Net, опубликованное в IIS, веб-приложение использует SignalR для отображения уведомлений. У меня также есть настольное приложение для создания оконных форм, которое используется для подключения к устройству для отпечатков пальцев, а также для отправки уведомления в веб-приложение о том, что человек только что вошел, чтобы я мог отобразить в веб-приложении уведомление об этом человеке. И все отлично работает с одним сеансом веб-приложения, но если я, например, открываю другую вкладку или просматриваю веб-приложение с другого компьютера, второй висит на connection.start()
, пока я не закрою первый сеанс. и это сводит меня с ума.
Вот код.
ASP.net core Hub
public class SignalRServer : Hub
{
public async Task displayNotification()
{
await Clients.All.SendAsync("displayNotification");
}
}
Код клиента Javascript
let connection = new signalR.HubConnectionBuilder()
.withUrl("/SignalRServer")
.configureLogging(signalR.LogLevel.Information)
.build();
connection.on("displayNotification", () => {
getLatestNotification();
});
connection.start();
В приложении Windows Forms есть два проекта. Первый - это .NET Framework 4.5, в котором для подключения к устройству используется API-интерфейс устройства идентификации. И второй проект - это стандарт .NET, который содержит код SignalR HubConnection для подключения к серверу, а HubConnection используется в первом проекте для подключения и отправки уведомлений.
windows формирует код подключения приложения Hub в стандарте .NET
public class HubNotification
{
HubConnection connection;
public HubNotification(string Ip)
{
connection = new HubConnectionBuilder()
.WithUrl(Ip + "/SignalRServer")
.Build();
connection.StartAsync();
}
public async Task ConnectAsync()
{
await connection.StartAsync();
}
public void SendNotAsync()
{
connection.InvokeAsync("displayNotification");
}
}
, затем в первом проекте я использую ConnectAsync
и SendNotAsync
, чтобы отправить уведомление при входе. Я не думаю, что есть проблема с настольным приложением, но я все равно разместил код. Я прочитал, что есть проблема с signalR и несколькими сессиями, но не нашел никакого решения.