Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从控制器获取连接id?_C#_Signalr - Fatal编程技术网

C# 如何从控制器获取连接id?

C# 如何从控制器获取连接id?,c#,signalr,C#,Signalr,我有一个中心: public class NotificationHub : Hub<INotificationHub> { private readonly static ConnectionMapping<User> connections = new ConnectionMapping<User>(); public override Task OnConnected() { var user = GetUser

我有一个中心:

public class NotificationHub : Hub<INotificationHub>
{
    private readonly static ConnectionMapping<User> connections = new ConnectionMapping<User>();

    public override Task OnConnected()
    {
        var user = GetUser();
        connections.Add(user, Context.ConnectionId);

        Groups.Add(Context.ConnectionId, user.GroupId.ToString());

        return base.OnConnected();
    }

    public string GetConnectionId(User user)
    {
        return connections.GetConnections(user).First();
    }

    private User GetUser() {}
}
公共类通知中心:中心
{
私有只读静态ConnectionMapping connections=新建ConnectionMapping();
已连接的公用覆盖任务()
{
var user=GetUser();
添加(用户,上下文,连接ID);
Add(Context.ConnectionId,user.GroupId.ToString());
返回base.OnConnected();
}
公共字符串GetConnectionId(用户)
{
返回connections.GetConnections(user.First();
}
私有用户GetUser(){}
}
在控制器中,我正在做:

var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();

context.Clients.Groups(user.GroupId.ToString()).Notify();
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.Groups(user.GroupId.ToString()).Notify();
但是上面的内容会发送给组中的所有用户。如何将其发送给当前发出请求的用户

注:
我正在从中心外部调用该方法。

要向特定客户端发送特定更新,您需要connectionId。正如你已经知道的那样,这个小组是为了广播

由于您是在单独的控制器中从集线器外部访问,因此您无权访问当前的Context.ConnectionId

但是,由于您确实拥有hubContext,如果您可以获得要向其发送更新的用户的connectionId,则可以使用以下方式向特定连接发送更新:

   context.Clients.Client(connectionid).Notify()
在您的情况下,将GetConnectionId设置为静态:

    public static string GetConnectionId(User user)
    {
      return connections.GetConnections(user).First();
    }
然后,向用户的特定连接发送通知:

    var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
    context.Clients.Groups(NotificationHub.GetConnectionId(user)).Notify();
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.Groups(NotificationHub.GetConnectionId(用户)).Notify();

这应该行。

现在我明白你的要求,但恐怕这是在可能的重复之前提出的