SignalR客户端在第二个会话上挂在start()上

时间:2019-10-25 18:33:56

标签: winforms asp.net-core signalr

我有一个发布到IIS的ASP.Net核心网络应用,该网络应用使用SignalR来显示通知。我也有一个桌面Windows窗体应用程序,该应用程序用于连接到指纹设备,还用于向刚刚输入一个人的Web应用程序发送通知,以便我可以在Web应用程序上显示该人的通知。 一切都可以与该Web应用程序的一个会话正常工作,但是例如,如果我打开另一个选项卡或从另一台计算机浏览该Web应用程序,则第二个应用程序将挂在connection.start()上,直到我关闭第一个会话。这让我发疯。

这是代码。

ASP.net核心中心

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窗体应用程序有两个项目,第一个是.NET Framework 4.5,该项目使用指纹设备API连接到设备。第二个项目是.NET标准,其中包含SignalR HubConnection代码以连接到服务器,第一个项目中使用HubConnection来连接和发送通知。

.NET标准中的Windows窗体应用程序集线器连接代码

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");

    }

}

然后在第一个项目中,当有人进入时,我使用ConnectAsyncSendNotAsync发送通知。 我认为桌面应用程序没有问题,但是我还是张贴了代码。 我已经阅读到signalR和多个会话存在问题,但是找不到任何解决方案。

0 个答案:

没有答案