Asp.net mvc 4 使用信号器刷新新闻列表

Asp.net mvc 4 使用信号器刷新新闻列表,asp.net-mvc-4,signalr,signalr-hub,Asp.net Mvc 4,Signalr,Signalr Hub,我有一个asp.NETMVC4.0应用程序。在我的一个视图中,我希望显示来自Web API的当前新闻列表(IEnumerable) 问题是,新闻列表可能会也可能不会经常更新。换句话说,平均每天,后端团队可能需要使用后端CMS输入5到45条新闻 我需要找到一种方法来刷新用户浏览器中的新闻列表,当然,不必刷新整个网页 我最初的想法是添加一个JavaScriptsetInterval()方法,该方法每X毫秒调用一次Web API,从而提取信息并刷新新闻列表 虽然这会起作用,但我希望使用不同的方法并使用

我有一个asp.NETMVC4.0应用程序。在我的一个视图中,我希望显示来自Web API的当前新闻列表(
IEnumerable

问题是,新闻列表可能会也可能不会经常更新。换句话说,平均每天,后端团队可能需要使用后端CMS输入5到45条新闻

我需要找到一种方法来刷新用户浏览器中的新闻列表,当然,不必刷新整个网页

我最初的想法是添加一个JavaScript
setInterval()
方法,该方法每X毫秒调用一次Web API,从而提取信息并刷新新闻列表

虽然这会起作用,但我希望使用不同的方法并使用
SignalR
,因为我相信该要求符合
SignalR
的要求

阅读并查看了《信号器》(SignalR)上的一些示例后,我开始理解其背后的思想,但我仍然有点困惑

我看到的例子是聊天室和游戏,用户可以在其中单击触发对
中心的调用的东西

在我的任务中,用户将没有任何可单击的内容。
hub
(服务器)应负责每隔X毫秒调用客户端以更新新闻列表

就性能而言,每X毫秒发送一次完整的新闻列表并覆盖UI是荒谬的

我需要一种方法将当前显示在用户浏览器中的新闻列表与中心内的新新闻列表进行比较。比较完成后,只发送新的比较新闻列表

有没有人有这样一个场景的例子,或者可以给我一些如何开始的建议


谢谢

您可以使用
SqlDependency
signal
来获取数据库更改通知,然后使用
knockout
可观察数组绑定
IEnumerable
来自动刷新页面

关于SqlDependency与Signalr的更多信息,请查看以下链接:

淘汰可观测阵列:


我制作了一个名为
signal.EventAggregatorProxy的库

它在后端服务总线或事件聚合器之间有一个代理,并无缝地将所有或选定的事件转发给客户端。客户端订阅某些事件,但您也可以创建自定义约束,以便用户仅接收所述事件的选择

查看wiki以了解如何设置它

使用nuget安装

Install-Package SignalR.EventAggregatorProxy 
一旦配置了在添加或更新新闻文章时触发事件,您就可以在后端、域、DAL等中的任何位置触发它,只要您的服务总线可以拾取它,我的代理也会拾取它

对于UI,使用Knockout或Angular创建一个动态列表,可以将更改推送到UI。用户第一次连接时加载初始数据,并向事件添加侦听器。一旦一个事件进入,检查该项是否在列表中,如果它是更新它,如果它不是添加它


林建议的
SqlDependency
对于一般的系统来说是不错的,但是一旦您的系统增长了,您就不想直接与SQL进行这种耦合了

我对signar不太熟悉。我将如何做这是您第一次尝试使用setInterval()。在这段时间间隔内,向控制器执行ajax调用,您可以在其中检查新记录。在ajax调用中,如果返回了记录,您可以将其附加到新闻表中。谢谢。虽然我喜欢我所看到的以及在不久的将来如何使用它,但不幸的是SQLDependency将适合我们当前的架构和场景。我相信你的回答最终会对其他人的特殊情况有所帮助。谢谢。我会仔细看看你的图书馆,也许会从中得到启发/使用它。就目前而言,这绝对是我在寻找帮助我完成当前任务的东西。谢谢