为什么集线器上没有会话 已连接/已断开连接

本文关键字:连接 断开 会话 集线器 为什么 | 更新日期: 2023-09-27 17:55:56

当我覆盖OnConnected/OnDisconnected然后查找具有HttpContext.Current.Session的会话时为空。

我假设此时已经创建了一个会话。我错过了什么吗?

为什么集线器上没有会话 已连接/已断开连接

只需确保在应用程序上启用了会话即可

通读 HtpContext.Current.Session 看起来您需要验证是否

"如果未启用会话状态,则无法设置或获取会话状态值。若要为应用程序配置会话状态设置,请在 Web.config 文件中设置 sessionState 元素的模式属性。启用会话状态并且您从不存在的会话状态变量请求值时,将返回 null"。

如果您认为 signalR 应该为您启用会话状态,那么不,它不会在另一个 SO 问题中 [由@dfowler确认]

你试过GetHttpContext吗?

var ctx = Context.Request.GetHttpContext();

您可以直接从 OnConnected/OnDisconnected 中的 cookie 获取会话 ID:

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 应用程序位于单个服务器上时才有效。