当我覆盖OnConnected
/OnDisconnected
然后寻找一个HttpContext.Current.Session
为空的会话时。
我假设此时已经创建了一个会话。我错过了什么吗?
当我覆盖OnConnected
/OnDisconnected
然后寻找一个HttpContext.Current.Session
为空的会话时。
我假设此时已经创建了一个会话。我错过了什么吗?
您是否尝试过 GetHttpContext?
var ctx = Context.Request.GetHttpContext();
只需确保您在应用上启用了会话
通读HtpContext.Current.Session看起来你需要验证是否
“如果未启用会话状态,则无法设置或获取会话状态值。要为应用程序配置会话状态设置,请在 Web.config 文件中设置 sessionState 元素的模式属性。启用会话状态并且您从不存在的会话状态变量中请求一个值,返回 null”。
如果您认为 signalR 应该为您启用会话状态,那么不,它不会 [由 @dfowler 确认] 在另一个 SO 问题
您可以直接从 OnConnected / OnDisconnected 中的 cookie 中获取 sessionID:
public override Task OnConnected() {
var sessionId = Context.RequestCookies["ASP.NET_SessionId"].Value;
}
现在有了 sessionID 字符串,您可以从自定义单例字典中查找会话,该字典在创建每个会话时填充 - 例如在 Global.asax 中,如下所示:
void Session_Start(object sender, EventArgs e)
{
GlobalSessions[context.Session.SessionID] = context.Session;
}
当然,这只适用于 Web 应用程序位于单个服务器上的情况。