Ich habe eine Mvc Webapplikation mit Signal und ich möchte die Tabelle in der veröffentlichten Web API aktualisieren.Ich kann web api controller nicht innerhalb des Signalgebers aufrufen. OnDisconnected Methode
web api Controller ruft Benutzer zu erhalten innerhalb der Onconnected
Methode funktioniert:
public override async Task OnConnected()
{
var users = await _client.GetAsync("chats/users");
Clients.All.userConnected();
}
Aber wenn ich den Code innerhalb der OnDisconnected
Methode platzieren es gibt mir eine Fehlermeldung:
public override async Task OnDisconnected(bool stopCalled)
{
var users = await _client.GetAsync("chats/users");
}
Warum ist das passiert? dies ist der ganze Hub
Code:
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");
}
EDIT: Ich fand heraus, dass, wenn ich var user = Context.User.Identity;
innerhalb der OnDisconnected
Methode lege der Benutzer IsAuthenticated = true
, aber wenn ich einen Haltepunkt in der AccessDelegatingHandler
Klasse setze die var identity = (ClaimsIdentity)HttpContext.Current.User.Identity;
Linie gibt ein Fehler und ist IsAuthenticated = false
Vielen Dank für Ihre Antwort, und ja, ich es auf dem Server bin Handhabung, weil das Problem ist, wenn ich es auf Client-Seite behandeln, wenn der Browser oder das Fenster geschlossen war, die Funktion, die die Datenbank nicht aktualisiert wird gefeuert. Was ich versuche zu tun ist, Benutzer IsOnline = false zu aktualisieren –