【问题标题】:ASP.Net inter session eventASP.Net 会话间事件
【发布时间】:2016-01-02 19:37:02
【问题描述】:

我有一个网站,许多注册用户同时连接,他们可以互相发送消息。每个用户在服务器上都有自己的 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 课上,我有:

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中这样的

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    我建议您尝试使用 SignalR 来解决这个问题。 SignalR 是构建实时聊天应用程序的完美组件。

    它可以让你做任何你想做的事情。

    查看本教程:

    http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr

    【讨论】:

    • 是的,我们是通过 SignalR 实现的消息系统
    【解决方案2】:

    我可能会使用应用程序来解决此问题 - 添加某种跟踪表或列表,或一组表或列表,具体取决于您在从另一个用户发送消息时添加用户 ID,并且检查消息时将其删除。这样就不需要查询数据库,并且应该为系统提供一种简单的方法来识别是否已收到该用户的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多