繁体   English   中英

在SignalR上的集线器内使用事务是正确的

[英]Is correct to use transaction inside a Hub on SignalR

我正在学习SignalR,对此有些疑问。

第一:集线器是否充当静态对象? 该问题移至下一个问题。

第二:在集线器内部的方法内启动事务是否正确?

我想使用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。

为每个请求创建集线器实例。 您可以在此处了解有关中心实例生存期的更多信息。 EF每次需要保存更改时都会创建一个事务。 但是,一旦保存更改完成且事务不会泄漏到SaveChanges调用之外,则EF所创建的事务将被提交/回滚并处置。 您还将布置上下文(这很好),以免泄漏事务或连接。 (实际上,集线器实例生存期与您的情况根本无关,因为您不尝试在类变量中存储任何内容)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM