我有一个网站,其中许多注册用户同时连接,他们可以互相发送消息。每个用户在服务器上都有自己的 Session 对象,在这个 Session 对象中我存储“消息”列表 - 这是用户的消息。
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 类中使用一个事件(当一条消息存储在数据库中时,会引发一个事件),但这些事件不会从一个 session 传递到另一个 session 。
在我的 BL 类(class)中,我有:
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
关于ASP.Net session 间事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569905/