如何在会话中持久保存事件?

时间:2013-09-20 15:45:06

标签: c# asp.net webforms signalr

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

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

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

所以我想在会话级别管理XMPP连接生命周期;即,在Session_Start / login中创建XMPP连接;在Session_End / logout中处理连接。这部分非常简单;但棘手的部分是如何在会话中存储XMPP连接,并在负载均衡器后面有多个Web服务器时可靠地触发事件。

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

所以主要问题是,根本没有解决方案吗?

由于

0 个答案:

没有答案