私はsignalvでmvc Webアプリケーションを持っており、公開されたWeb APIのテーブルを更新したいと思います。シグナルの内部でWeb APIコントローラを呼び出すことができませんOnDisconnectedメソッド
正常に動作しますOnconnected
メソッド内のユーザーを取得するには、ウェブAPIコントローラを呼び出す:
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
コードです:私は私がOnDisconnected
メソッド内var user = Context.User.Identity;
を置いたときに、ユーザーがIsAuthenticated = true
ですが、私はAccessDelegatingHandler
クラス内のブレークポイントを配置するときvar identity = (ClaimsIdentity)HttpContext.Current.User.Identity;
ラインが与えることが判明 :
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 IsAuthenticated = false
あなたの答えのおかげで、問題は、ブラウザまたはウィンドウが閉じられたとき、私はクライアント側でそれを扱う際に、データベースを更新する機能はされませんですので、はい私は、サーバー上で、それを処理しています発砲した。私がしようとしているのは、ユーザーIsOnline = falseを更新することです –