2012-03-01 128 views
4

我试图保持对用户的连接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将是巨大的帮助提前

感谢

+0

为什么你想保持相同的连接ID?在我看来,如果用户打开另一个选项卡,这可能会导致问题。 – Stilgar 2012-03-01 15:12:49

+0

我登录后,在SQL服务器Db中存储用户的连接ID,然后如果我必须让该用户加入任何空间,我从数据库获取其连接ID,并使用AddToGroup()将该连接ID添加到组中。 .Basiclly即时通讯这样做,我可以轻松地将他添加到任何聊天室我可以... – bhargav 2012-03-01 15:15:14

+0

为什么不使用其他方法,如用户名或cookie信息?您甚至可以在连接状态下传输此数据(编辑:集线器状态)。在我看来,滥用连接ID代表一些其他信息(在你的情况下,用户)是不是正确的事情 – Stilgar 2012-03-01 15:18:28

回答

1

的到期日期为饼干应该是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'进行访问。请检查您是否在那里发现拼写错误。

+0

添加UTC并不有助于 – bhargav 2012-03-01 15:34:55

+0

cookie值已设置但我无法在类文件中访问它始终为空 – bhargav 2012-03-01 15:36:17

+0

我更新了另一件我注意到的事件,请检查。如果它不起作用,请检查FireBug是否正在发送Cookie。 – tpeczek 2012-03-01 15:52:57

0

确保你设置了cookie的路径,特别是如果页面坐在一个子目录中。我遵循类似的方法,并且当cookie路径设置为root时,它都可以工作。