我有一个asp.net MVC 4.0应用程序。在我的观点中,我希望显示来自Web的当前新闻(IEnumerable<News>)列表。
问题是新闻列表可能会更新,也可能不会经常更新。换句话说,平均一天,后端团队可能不得不使用后端CMS从5到45输入新闻。
我需要找到一种方法来刷新用户在浏览器中的新闻列表,当然,不需要刷新整个网页。
我最初的想法是添加一个JavaScript setInterval()方法,每隔X毫秒调用Web一次,从而提取信息并刷新新闻列表。
虽然这样做可行,但我希望使用不同的方法并使用SignalR,因为我认为这个需求符合SignalR必须提供的内容。
在阅读和查看了一些关于SignalR的例子之后,我开始理解它背后的想法,但我仍然有点困惑。
我看到的例子是聊天室和游戏,用户可以点击一些东西,这会触发对hub的调用。
在我的任务中,用户将不需要单击任何。hub (服务器)应该负责每隔X毫秒调用客户端来更新新闻列表。
就性能而言,在每一个X毫秒发送整个新闻列表并覆盖UI将是荒谬的。
我需要一种方法来比较当前显示在用户浏览器中的新闻列表和中心内部的新新闻列表。完成比较后,只发送新的比较新闻列表。
有没有人有这样一个场景的例子,或者可以给我一些关于如何开始这个场景的建议?
谢谢
发布于 2014-01-16 08:44:24
我做了一个名为SignalR.EventAggregatorProxy的库
它在后端服务总线或事件聚合器之间有一个代理,并将所有或选定的事件无缝地转发给客户端。客户端订阅某些事件,但也可以创建自定义约束,以便用户只接收所述事件的选择。
检查wiki如何设置它。
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
使用nuget安装
Install-Package SignalR.EventAggregatorProxy 在添加或更新新闻文章时,一旦配置好触发事件,您就可以在后端、域、DAL等任何地方触发事件,只要您的服务总线能够接收到它,我的代理也会得到它。
对于UI,使用Knockout或角创建一个动态列表,可以将更改推送到UI。当用户第一次连接并向事件添加侦听器时,加载初始数据。一旦一个事件进入检查项目是否在列表中,如果它是更新它,如果它没有添加它。
Lin建议的SqlDependency对于简单的系统来说是可以的,但是一旦您的系统增长,您就不希望有这种直接与SQL的耦合。
发布于 2014-01-15 16:32:59
您可以使用SqlDependency和Signalr获得数据库更改通知,然后将IEnumerable<News>与knockout可观察数组绑定起来,以自动刷新页面。
有关Signalr的SqlDependency的更多信息,请查看以下链接:
http://techbrij.com/database-change-notifications-asp-net-signalr-sqldependency
剔除可观测阵列:
https://stackoverflow.com/questions/21142379
复制相似问题