Клиент SignalR зависает при запуске () во второй сессии - PullRequest
1 голос
/ 25 октября 2019

У меня есть основное веб-приложение 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 и несколькими сессиями, но не нашел никакого решения.

...