我有一个发布到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");
}
}
然后在第一个项目中,当有人进入时,我使用ConnectAsync
和SendNotAsync
发送通知。
我认为桌面应用程序没有问题,但是我还是张贴了代码。
我已经阅读到signalR和多个会话存在问题,但是找不到任何解决方案。