Let*_*man 19 c# asp.net-mvc-4 signalr
我刚刚发现你无法访问SignalR Hub中的当前会话.
简化我的场景:我试过写聊天.
当前用户的名称保留在会话中.
我已经使用SignalR来更新(一组连接)每个新消息.
现在我看到我无法通过集线器访问当前用户的名称.
我想可能会有一些变通方法,但是我的设计是错误的吗?
我不应该为此目的使用SignalR吗?或者我不应该Session以这种方式使用?
Lar*_*ner 25
您不应该使用Session与SignalR(请参阅SignalR不在服务器上使用Session).您可以通过其连接ID识别逻辑连接,您可以将其映射到用户名.
基本问题是在ASP.NET中序列化对SessionState的访问以确保状态一致性,因此对集线器的每个请求都将阻止其他请求.在过去,有限的只读访问(我假设(但由于要点已经消失)无法确认,通过将EnableSessionstate设置为只读,这可以防止我所描述的锁定问题),但是对此的支持被删除了.另请参阅SignalR团队发表类似声明的其他各个地方.最后:有官方在一份声明文件有关HTTPContext.Current.Session.
小智 11
您可以通过Query String将值从客户端发送到服务器中心.
在该$.connection.hub.start()方法之前,您可以添加如下内容:
客户端JS代码:
// Replace "some value" with the session value or anything you want
$.connection.hub.qs = { "Name": "some value" };
$.connection.hub.start()...bla bla bla
Run Code Online (Sandbox Code Playgroud)
在Hub的服务器端,您可以在任何方法中使用它:
string ClientValue= Context.QueryString["Name"].ToString();
Run Code Online (Sandbox Code Playgroud)
我没有用会话测试,但当然在客户端你可以尽可能地棒.
| 归档时间: |
|
| 查看次数: |
20528 次 |
| 最近记录: |