我有一个网站,许多注册用户同时连接,他们可以互相发送消息.每个用户在服务器上都有自己的Session对象,在这个Session对象中我存储了"Messages"列表 - 这是用户的消息.
Session["Messages"] = new List(); //.... more code here Session["Messages"] = BL.GetMyMessages(); //get a list of messages //.... more code here BL.MessageReceived += RefreshUserMessages(); public static void RefreshUserMessages(){ //this code doesn't execute for all the sessions, but only for my current user. }
我需要一种方法来了解用户何时收到新消息 - 我不希望每个请求都询问我的数据库.
我尝试使用BL类中的事件(当消息存储在数据库中时,会引发一个事件),但事件不会从一个会话传递到其他会话.
在我的BL课程中,我有:
public delegate void MessageReceivedEventHandler(object sender, MessageEventArgs e); public static event MessageReceivedEventHandler MessageReceived; public static int SaveMessageForUser(Message msg) { //... save the message if(MessageReceived != null) { MessageReceived (userid, msg) // <-- correct parameters go here } }
任何的想法?如何实现,在ASP.Net这样的
我建议您尝试使用SignalR来解决此问题.SignalR是用于以最小的努力构建实时聊天应用程序的完美组件.
它可以让你做你想做的一切.
查看本教程:
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr