signalR维护用户连接ID
我试图保持对用户的连接ID,我的意思是,即使他刷新页面,他得到相同的ConnectionIdsignalR维护用户连接ID
这是我能做什么,直到如今
的JavaScript部分
// Start the connection
$.connection.hub.start(function() { chat.join(projectId, userId, userName); }).done(function() {
alert("Connected!");
var myClientId = $.connection.hub.id;
setCookie("srConnectionid", myClientId, 1);
});
function setCookie(cName, value, exdays) {
try{
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate);
document.cookie = cName + "=" + c_value;
}
catch(err){
alert(err.Description);
}
}
,然后我提出继承IConnectionIdFactory这样
public class MyConnectionFactory : IConnectionIdFactory
{
public string CreateConnectionId(IRequest request)
{
if (request.Cookies["srconnectionid"] != null)
{
return request.Cookies["srconnectionid"];
}
return Guid.NewGuid().ToString();
}
}
一个类3210
我registerd中的Application_Start()上述类,如下
protected void Application_Start()
{
AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory),() => new MyConnectionFactory());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
我的问题是每次MyConnectionFactory类称为CreateConnectionId Request.Cookies时里面[“srconnectionid”]为空每次,所以用户被分配新每次只能找到一个链接,我只能找到一个链接,帮助我保持连接ID。它是http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances
任何人都可以建议如何解决我的问题,或者是否有任何其他方法来重复使用同一用户的连接ID。 。?
cookie的值被设置在clientside.I一直在尝试这2 days.It将是巨大的帮助提前
感谢
的到期日期为饼干应该是UTC字符串(你没有这样做,所以很可能服务器将您的cookie视为已过期)。改变你的代码是这样的:
var cValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = cName + "=" + cValue;
或者你可能只是使用jQuery Cookie plugin用于设置cookie。
UPDATE
而且cookie的名字在你所提供的代码inconsitent。您正在设置名称为'userConnectionid'的cookie,但试图通过名称'srconnectionid'进行访问。请检查您是否在那里发现拼写错误。
确保你设置了cookie的路径,特别是如果页面坐在一个子目录中。我遵循类似的方法,并且当cookie路径设置为root时,它都可以工作。
为什么你想保持相同的连接ID?在我看来,如果用户打开另一个选项卡,这可能会导致问题。 – Stilgar 2012-03-01 15:12:49
我登录后,在SQL服务器Db中存储用户的连接ID,然后如果我必须让该用户加入任何空间,我从数据库获取其连接ID,并使用AddToGroup()将该连接ID添加到组中。 .Basiclly即时通讯这样做,我可以轻松地将他添加到任何聊天室我可以... – bhargav 2012-03-01 15:15:14
为什么不使用其他方法,如用户名或cookie信息?您甚至可以在连接状态下传输此数据(编辑:集线器状态)。在我看来,滥用连接ID代表一些其他信息(在你的情况下,用户)是不是正确的事情 – Stilgar 2012-03-01 15:18:28