我有一個mvc web信號與signalr,我想更新發布的web api中的表。無法調用信號器OnDisconnected方法內的web api控制器
調用Web API控制器,讓用戶內部Onconnected
法正常工作:
public override async Task OnConnected()
{
var users = await _client.GetAsync("chats/users");
Clients.All.userConnected();
}
但是,當我的代碼放在OnDisconnected
方法裏面給我一個錯誤:
public override async Task OnDisconnected(bool stopCalled)
{
var users = await _client.GetAsync("chats/users");
}
爲什麼這發生?這是整個Hub
代碼:
private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
private HttpClient _client;
public ChatHub()
{
AccessDelegatingHandler handler = new AccessDelegatingHandler();
_client = HttpClientFactory.Create(handler);
_client.BaseAddress = new Uri(ClsConfig.GetConfiguration().APIBaseAddress);
}
// Send new message to group chat.
public static void SendGroupMessage(MessageDetailModel messageDetail)
{
hubContext.Clients.All.newGroupMessageReceived(messageDetail);
}
public override async Task OnConnected()
{
var users = await _client.GetAsync("chats/users");
Clients.All.userConnected();
}
public override Task OnReconnected()
{
return base.OnReconnected();
}
public override async Task OnDisconnected(bool stopCalled)
{
var users = await _client.GetAsync("chats/users");
}
編輯: 我發現,當我把var user = Context.User.Identity;
的OnDisconnected
方法內用戶IsAuthenticated = true
但是當我放置AccessDelegatingHandler
類中的破發點var identity = (ClaimsIdentity)HttpContext.Current.User.Identity;
行給出一個錯誤,並且是IsAuthenticated = false
感謝您的回答,是的,我處理它在服務器上,因爲這個問題是,當我處理這件事上的客戶端時,瀏覽器或窗口被關閉,這將更新數據庫的功能將不被解僱。我想要做的是更新用戶IsOnline = false –