我有一个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 –