我有一个网站,许多注册用户同时连接,他们可以互相发送消息。每个用户在服务器上都有自己的Session对象,在这个Session对象中我存储了" Messages" list - 这是用户的消息。
Session["Messages"] = new List<UserMesages>();
//.... 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这样的
答案 0 :(得分:5)
我建议您尝试使用SignalR来解决此问题。 SignalR是用于以最小的努力构建实时聊天应用程序的完美组件。
它可以让你做你想做的一切。
查看本教程:
http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr
答案 1 :(得分:1)
我可能会使用应用程序来处理此问题 - 添加某种跟踪表或列表,或者一组表或列表,当您从另一个用户发送消息时添加用户ID,以及检查邮件时将其删除。这将无需询问数据库,并应为系统提供一种简单的方法来识别是否已收到该用户的消息。