Signalr 向未按名称(标识)标识的单个客户端发送消息

Signalr 向未按名称(标识)标识的单个客户端发送消息,signalr,Signalr,我知道以前也有人问过类似的问题,但现在是这样 我有一个ASP.NET应用程序,为连接的客户端提供图像。所有客户端都通过owin以用户名和密码连接,可以有多个客户端以相同的用户名和密码连接。但是,可能需要为每个客户机提供独特的图像。这意味着我需要使用一个唯一的“中心ID”来为每个图像提供服务 问题来自在CustomUserProvider类的GetUserID方法上检索此“集线器ID”。IRequest参数没有为我提供足够的信息来唯一标识连接。如果我可以(我不能(??)进入页面的会话状态,那么问题

我知道以前也有人问过类似的问题,但现在是这样

我有一个ASP.NET应用程序,为连接的客户端提供图像。所有客户端都通过owin以用户名和密码连接,可以有多个客户端以相同的用户名和密码连接。但是,可能需要为每个客户机提供独特的图像。这意味着我需要使用一个唯一的“中心ID”来为每个图像提供服务

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

有人有什么想法吗。我正在考虑使用url,我可以为每个连接创建唯一的url

(有人知道如何在GetUserID中获取页面的原始url吗)

我解决这个问题的方法如下。我在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是代码隐藏中引用的HUBID:

   var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubs.MimicHub>();
        hubContext.Clients.User(HubID).addImage(MimicImage,
        ImageWidth, ImageHeight
        );
var-hubContext=GlobalHost.ConnectionManager.GetHubContext();
hubContext.Clients.User(HubID).addImage(mimimImage,
图像宽度,图像高度
);
每个信号器连接(客户端)都有自己的ConnectionId

您可以使用此ID标识每个连接的同一用户

您可以接收此唯一连接ID:

public override Task OnConnected()
{
   var connectionId = Context.ConnectionId;
}
更多信息:

请参见修正后的问题。也许有一个更好的办法,但效果很好。

请看,其中的共识是“不,他们不应该”!谢谢,但我通过查看以下内容设法解决了这个问题:`public string GetUserId(IRequest请求){string id=”“;try{HttpContextBase requestContext=request.Environment[typeof(HttpContextBase.FullName]作为HttpContextBase;字符串url=requestContext.Request.UrlReferer.AbsoluteUri;var parsedQuery=HttpUtility.ParseQueryString(url);id=parsedQuery[“HUBID”];}catch{}返回id`