【问题标题】:Why is there no Session on Hub OnConnected / OnDisconnected?为什么集线器 OnConnected / OnDisconnected 上没有 Session?
【发布时间】:2015-11-30 07:22:22
【问题描述】:

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

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

【问题讨论】:

标签: c# .net session signalr signalr-hub


【解决方案1】:

只需确保您在应用上启用了会话

阅读HtpContext.Current.Session,您似乎需要验证是否

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

如果您认为 signalR 应该为您启用会话状态,那么不会 [@dfowler 确认]Another SO Question

【讨论】:

    【解决方案2】:

    你试过GetHttpContext吗?

    var ctx = Context.Request.GetHttpContext();
    

    【讨论】:

    • GetHttpContext 不存在,能否把所有 using 语句发给我
    【解决方案3】:

    您可以直接从 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 应用程序位于单个服务器上的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多