C# 为什么集线器上没有已连接/未连接的会话?

C# 为什么集线器上没有已连接/未连接的会话?,c#,.net,session,signalr,signalr-hub,C#,.net,Session,Signalr,Signalr Hub,当我覆盖已连接的OnConnected/OnDisconnected并使用HttpContext查找会话时,当前.Session为空 我假设此时已经创建了一个会话。我错过了什么吗?只要确保你的应用程序已启用会话即可 通读一遍,你需要确认一下 “如果未启用会话状态,则无法设置或获取会话状态值。若要配置应用程序的会话状态设置,请在Web.config文件中设置sessionState元素的mode属性。当启用会话状态并从不存在的会话状态变量请求值时,将返回null。” 如果您认为signalR应该为

当我覆盖已连接的
OnConnected
/
OnDisconnected
并使用
HttpContext查找会话时,当前.Session
为空


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

只要确保你的应用程序已启用会话即可

通读一遍,你需要确认一下

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


如果您认为signalR应该为您启用会话状态,则不会在

处[由@dfowler确认]。您是否尝试过GetHttpContext

var ctx = Context.Request.GetHttpContext();

您可以直接从OnConnected/OnDisconnected中的cookie获取sessionID:

public override任务OnConnected(){
var sessionId=Context.RequestCookies[“ASP.NET_sessionId”].Value;
}

现在有了sessionID字符串,您可以从自定义单例词典中查找会话,该词典在创建每个会话时填充,例如在Global.asax中,如下所示:

void会话\u启动(对象发送方,事件参数e)
{
GlobalSessions[context.Session.SessionID]=context.Session;
}


当然,这仅在web应用程序位于一台服务器上时有效。

GetHttpContext的可能副本不存在,能否将所有using语句发送给我