向未通过名称标识的单个客户端发送消息(身份)

时间:2016-02-04 10:58:23

标签: signalr

我之前已经问过类似的问题了,但是这里有了

我有一个ASP.NET应用程序,可以为连接的客户端提供图像。所有客户端都通过owin与用户名和密码连接,并且可能有多个客户端使用相同的用户名和密码连接。但是,每个客户可能需要提供独特的图像。这意味着我需要使用一个独特的"集线器ID"为每个图像服务。

问题来自于检索此"集线器ID"在CustomUserProvider类的GetUserID方法上。 IRequest参数不能为我提供足够的信息来唯一地标识连接。如果我能得到(我可以'(??))到页面的会话状态,那么问题就解决了。

有没有人有任何想法。我想也许正在使用网址 - 我可以为每个连接创建独特的网址....

(有没有人知道如何在GetUserID中获取页面的原始网址)

我解决了这个问题如下。我在URL上附加了一个唯一的ID。然后在CustomUserProvider的GetUserID

  public string GetUserId(IRequest request)
    {
        string id = "";
        try
        {
            HttpContextBase  requestContext = request.Environment[typeof(HttpContextBase).FullName] as HttpContextBase;

            string url = requestContext.Request.UrlReferrer.AbsoluteUri;
            var parsedQuery = HttpUtility.ParseQueryString(url);
            id = parsedQuery["HUBID"];

        }
        catch { }

        return id;

这个HUBID是后面代码中引用的那个:

   var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubs.MimicHub>();
        hubContext.Clients.User(HubID).addImage(MimicImage,
        ImageWidth, ImageHeight
        );

2 个答案:

答案 0 :(得分:0)

每个Signalr连接(客户端)都有自己的ConnectionId。

您可以使用此ID识别相同的用户foreach连接。

您可以收到这个唯一的connectionId:

public override Task OnConnected()
{
   var connectionId = Context.ConnectionId;
}

更多信息: http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections

答案 1 :(得分:0)

请参阅修正后的问题。可能有一个更好的,但这完美地运作。