C# 如何在会话中持久化具有事件的对象?

C# 如何在会话中持久化具有事件的对象?,c#,asp.net,webforms,signalr,C#,Asp.net,Webforms,Signalr,目前我正在使用SignalR在我们的应用程序中提供聊天功能。但是我使用OpenFireXMPP服务器作为聊天后端。因此,信号集线器在OnConnected事件中创建XMPP连接;此连接在OnDisconnected事件中关闭 更重要的是,XMPP连接公开了一些事件,如OnAuthenticated、OnRosterStart、OnRosterEnd、OnMessage等。hub处理这些事件并调用适当的客户端JS方法 这不是一个单页应用程序,因此用户将在页面之间导航;因此,为每个页面重新创建XMP

目前我正在使用SignalR在我们的应用程序中提供聊天功能。但是我使用OpenFireXMPP服务器作为聊天后端。因此,信号集线器在OnConnected事件中创建XMPP连接;此连接在OnDisconnected事件中关闭

更重要的是,XMPP连接公开了一些事件,如OnAuthenticated、OnRosterStart、OnRosterEnd、OnMessage等。hub处理这些事件并调用适当的客户端JS方法

这不是一个单页应用程序,因此用户将在页面之间导航;因此,为每个页面重新创建XMPP连接不是一个好主意。此外,我们还有一些边缘情况,即用户丢失消息,如果发送方在SignalR连接终止时发送了一条消息,而接收方到达的新页面中尚未初始化

因此,我希望在会话级别管理XMPP连接生命周期;i、 e.在会话启动/登录中创建XMPP连接;在会话结束/注销时处理连接。这部分很简单;但棘手的部分是,当负载平衡器后面有多个web服务器时,如何在会话中存储XMPP连接并让它可靠地触发事件

我对ASP.NET提供的任何持久性机制(如会话、缓存、应用程序变量等)的理解都是关于序列化/反序列化数据的。但在这种情况下,我要存储的对象有需要处理的事件

所以主要的问题是,有没有解决办法


谢谢

如果我理解正确,那么信号器将被用作通往XMPP的桥梁。我认为您需要将会话密钥存储为cookie或localStorage,并让服务器保持XMPP会话的活动状态—客户端可以从服务器查找连接。当用户超时或断开连接时,服务器可以处理清理。您需要为信号机提供某种背板,以便让所有服务器共享连接。@Romoku,让我感到困惑的是信号机部分的背板。任何指向那个方向的指针都是好的。谢谢