使用来自访问数据库的c#的实时数据馈送

时间:2012-06-25 11:35:36

标签: c# asp.net .net real-time

我目前正在建立一个网站(ASP.net c#),我们正在寻找为我们网站上的数据事件创建一个实时源(类似于facebook)。我想知道你对如何最好地实现这一点的想法,因为我不确定我的理解是否正确。

我们有以下活动:发布新文章,用户上线。

用户将登录其成员区域,然后应该看到实时Feed。

我目前的想法是,我每隔几秒钟(从用户浏览器)查询一次查询自上次请求日期以来的任何新事件。如果从dateX(最后一个请求日期)开始有新的,那么就显示出来。

我会将最后一个请求日期与用户ID一起保存,所以当他们回来时,我知道他们看到的最后一件事是什么。

这是最好的方式吗 - 或者我应该看看某种推送方法?我需要它是跨浏览器友好的并且支持旧版浏览器...所以我看过的HTML 5方法实际上并不是一个选项。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:2)

您可以使用AJAX。 ASP.NET具有诸如更新面板之类的控件,可以为您提供所需的功能。然后,您可以将更新面板设置为根据UserId以及刷新数据的最后日期重新加载内容。

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

 <div id="UserLiveFeed">

    <asp:UpdatePanel ID="upLiveFeed" runat="server">
        <ContentTemplate>
             <asp:Label runat="server" Text="Last updated" id="lblLastUpated">
             <!-- Your content here -->
             <asp:Timer runat="server" id="tmrLiveFeed" Interval="3000" OnTick="tmrLiveFeed_Tick"></asp:Timer>
        </ContentTemplate>
    </asp:UpdatePanel>

</div>

然后更新您的Feed的内容(连接到数据库并获取新数据):(我每隔3秒更新一次当前时间的标签)

protected void tmrLiveFeed_Tick(object sender, EventArgs e)
{
   lblLastUpdated = DateTime.Now.ToString();
}

另一种选择是使用SignalR,这是一个提供实时功能的ASP.NET库。

答案 1 :(得分:1)

您可能想要查看SignlarR。这是用于构建交互式Web应用程序的.NET库,就像您的场景一样。

另一个选项就是您在问题中提到的内容。每n秒进行一次ajax调用以检查数据库并更新UI。但是我认为SignalR要好得多,因为它不依赖于连续命中的方法!

答案 2 :(得分:0)

我建议您查看一些消息传递总线freameworks,例如NServiceBus或开源MassTransit。它们位于(Microsoft Messaging Queue)MSMQ之上,使其更舒适,

不是每隔几秒轮询数据库,只有在DB中写入更改时,您才可以向所有订阅的客户端发送轻量级消息。然后客户端只对他们感兴趣的更改做出反应。此外,即使客户端处于脱机状态/已注销,您也可以使用queus transaactional,这样您就不会丢失任何消息。

(编辑使文字再次可读......)