加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – signalR维护用户连接ID

发布时间:2020-12-16 09:36:26 所属栏目:asp.Net 来源:网络整理
导读:我试图维护用户的连接ID,我的意思是即使他刷新页面他得到相同的connectionid 这是我到目前为止所能做的 javascript部分 // Start the connection $.connection.hub.start(function () { chat.join(projectId,userId,userName); }).done(function () { alert(
我试图维护用户的连接ID,我的意思是即使他刷新页面他得到相同的connectionid

这是我到目前为止所能做的

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();
    }
  }

我在Application_start()中注册了上面的类,如下所示

protected void Application_Start()
    {

        AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory),() => new MyConnectionFactory());     
        AreaRegistration.RegisterAllAreas(); 
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

我的问题是每次在CreateConnectionId中调用MyConnectionFactory类
request.Cookies [“srconnectionid”]每次都为null,因此每次都会为用户分配新的connectionid.我只能找到一个帮助我维护连接ID的链接.它是http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances

任何人都可以建议如何解决我的问题,还是有任何其他方法来重用同一用户的连接ID …?

Cookie值在客户端设置.我已经尝试了2天.这将是很好的帮助

提前致谢

解决方法

cookie的过期日期应该是UTC字符串(您没有这样做,所以很可能服务器将您的cookie视为已过期).像这样更改你的代码:

var cValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = cName + "=" + cValue;

或者您可以使用jQuery Cookie plugin来设置cookie.

UPDATE

在您提供的代码中,cookie的名称也是不一致的.您正在设置名为“userConnectionid”的cookie,但尝试通过名称“srconnectionid”进行访问.请检查您是否在那里没有拼写错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读