おそらく、SignalR でグループを実装する正しい方法を完全には理解していないと思います:)
いくつかの JS と組み合わせた SignalR ハブを使用しています。関連するコードは次のようになります。
public class NotificationHub : Hub
{
public void RegisterUser()
{
if (Context.User.Identity.IsAuthenticated)
{
var username = Context.User.Identity.Name;
Groups.Add(Context.ConnectionId, username);
//check roles
var roles = Roles.GetRolesForUser(username);
foreach (var role in roles)
{
Groups.Add(Context.ConnectionId, role);
}
}
}
public override Task OnConnected()
{
RegisterUser();
return base.OnConnected();
}
//rejoin groups if client disconnects and then reconnects
public override Task OnReconnected()
{
RegisterUser();
return base.OnReconnected();
}
}
このコードをステップ実行すると、意図したとおりに機能することがわかります。
しかし、実際にメッセージを送信するようになると、ALL へのブロードキャストが機能します。ユーザー名 (ユーザー固有のグループ) を介して特定のユーザーにブロードキャストしようとしても、何も起こりません。
public void BroadcastNotification(List<string> usernames, Notification n)
{
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
foreach (var username in usernames)
{
context.Clients.Group(username).broadcastMessage(new NotificationPayload()
{
Title = n.Title,
Count = UnitOfWork.NotificationRepository.GetCount(),
Notification = n.Body,
Html = RenderPartialViewToString("_singleNotification", n)
});
}
}
私が思っていたように、グループは機能しないようです。ここに欠けているステップはありますか?