Signalr 向未按名称(标识)标识的单个客户端发送消息
我知道以前也有人问过类似的问题,但现在是这样 我有一个ASP.NET应用程序,为连接的客户端提供图像。所有客户端都通过owin以用户名和密码连接,可以有多个客户端以相同的用户名和密码连接。但是,可能需要为每个客户机提供独特的图像。这意味着我需要使用一个唯一的“中心ID”来为每个图像提供服务 问题来自在CustomUserProvider类的GetUserID方法上检索此“集线器ID”。IRequest参数没有为我提供足够的信息来唯一标识连接。如果我可以(我不能(??)进入页面的会话状态,那么问题就解决了 有人有什么想法吗。我正在考虑使用url,我可以为每个连接创建唯一的url (有人知道如何在GetUserID中获取页面的原始url吗) 我解决这个问题的方法如下。我在URL上附加了一个唯一的id。然后在CustomUserProvider的GetUserID中Signalr 向未按名称(标识)标识的单个客户端发送消息,signalr,Signalr,我知道以前也有人问过类似的问题,但现在是这样 我有一个ASP.NET应用程序,为连接的客户端提供图像。所有客户端都通过owin以用户名和密码连接,可以有多个客户端以相同的用户名和密码连接。但是,可能需要为每个客户机提供独特的图像。这意味着我需要使用一个唯一的“中心ID”来为每个图像提供服务 问题来自在CustomUserProvider类的GetUserID方法上检索此“集线器ID”。IRequest参数没有为我提供足够的信息来唯一标识连接。如果我可以(我不能(??)进入页面的会话状态,那么问题
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`