我之前已经问过类似的问题了,但是这里有了
我有一个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
);
答案 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)
请参阅修正后的问题。可能有一个更好的,但这完美地运作。