我正在学习SignalR,我对它有些怀疑。
首先:Hub是否作为静态对象工作?这个问题转移到下一个问题。
第二:在集线器内的方法内启动事务是对的吗?
我想使用SignalR实时发送和保存信息。例如,我想创建一个聊天,当服务器收到消息时,它会保存在数据库中。
我的问题是接收消息的方法将永远存在于内存中(当webapp正在运行时)。
我关心的是交易/连接。交易是否始终有效?
例如:
public void Send(string name, string message)
{
Message m = new Message() { n = name, m = message};
using(Entities db = new Entities()
{
db.Messages.Add(m);
db.Save();
}
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
我正在使用EntityFramework 6和SignalR 2。
答案 0 :(得分:1)
为每个请求创建Hub实例。您可以阅读有关中心实例生存期here的更多信息。
EF每次需要保存更改时都会创建一个事务。但是,一旦保存更改完成且事务不会在SaveChanges
调用之外泄漏,则EF创建的事务将被提交/回滚并处理。您还处理您的上下文(这是好的),因此您不会泄漏事务或连接。 (实际上,在您的情况下,实际上并不是集线器实例生命周期是相关的,因为您不会尝试在类变量中存储任何内容)。