我一直試圖使用SignalR為一個MVC網站添加一個實時通知功能。我正在使用Asp.NET Identity進行認證。
正如我從SignalR 檔案中所理解的那樣,Hub 類的 OnConnected 方法應該在用戶登錄時啟動。
因此,當我前來除錯時,如果我簽署了第一個用戶,OnConnected 方法就會正常呼叫。然而,當我打開另一個瀏覽器(例如:Firefox、Microsoft edge ...)并登錄另一個用戶時,OnConnected 卻從未被呼叫。
我的啟動類看起來像這樣:
[]
namespace NotificationApp[/span
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app)。
app.MapSignalR()。
}
}
}
Hub類
namespace NotificationApp
{
Authorize] [Authorize] 。
public class NotificationHub : Hub {
//this gets called for the first logged in user only
public override Task OnConnected()
{
Clients.Client(Context.ConnectionId).connected(Context.ConnectionId)。
return base.OnConnected()。
}
public override Task OnDisconnected() title">OnDisconnected(bool stopCalled)
{
return base.OnDisconnected(stopCalled)。
}
}
客戶端代碼
$(document).ready(function () {
var notificationHub = $.connection.notificationHub;
//Called for every client properly
$.connection.hub.start().done(function () {
console.log('notification hub started')。
});
//this gets called for the first logged in user only[/span].
notificationHub.client.connected = function (message) {
console.log('Hello' message)。
};
});
uj5u.com熱心網友回復:
當你打開另一個標簽時,你是同一個客戶端,然后被賦予一個連接ID。
嘗試改變 "客戶端":
public override Task OnConnected()
{
Clients.Client(Context.ConnectionId).connected(Context.ConnectionId)。
return base.OnConnected()。
給 "呼叫者":
public override Task OnConnected()
{
Clients.Caller.connected(Context.ConnectionId)。
return base.OnConnected()。
另外,將你的客戶端函式移到你的 hub.start 之前。你應該總是在你的啟動之前注冊一個函式。請參閱docs中的相關說明。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324063.html
標籤:
上一篇:將區域變數改為全域變數不起作用
