使用C#从Access数据库获取实时数据源

4
我正在构建一个网站(ASP.net c #),想要创建一个实时反馈(类似于Facebook),用于在我们的网站上数据事件。我想知道您对如何最好地实现此功能的看法,因为我不确定我的理解是否正确。
我们有诸如:发布新文章、用户在线等事件。
用户将登录其会员区域,然后应该看到实时反馈。
我目前的想法是每隔几秒钟就要进行一次查询(来自用户浏览器),查找自上次请求日期以来的任何新事件。如果自dateX(上次请求日期)以来有新事件,则显示它们。
我将保存最后一个请求日期以及userID,因此当他们回来时,我知道他们看到的最后一件事情是什么。
这是做这件事的最佳方法吗?还是我应该寻找某种推送方法?我需要它支持跨浏览器和较旧的浏览器……因此,我查看过的HTML 5方法不是真正的选择。
感谢任何意见。
3个回答

2
您可以使用AJAX来实现这一功能。ASP.NET有诸如Update Panel之类的控件,可为您提供所需的功能。然后,您可以根据用户ID和上次刷新数据的日期设置Update Panel以重新加载内容。
    <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>

然后更新您的订阅内容(连接到数据库并获取新数据):(我每三秒钟更新一次标签以显示当前时间)
protected void tmrLiveFeed_Tick(object sender, EventArgs e)
{
   lblLastUpdated = DateTime.Now.ToString();
}

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

那个方案非常完美,谢谢 - 但是考虑到 SignalR 选项,这意味着与数据库的连接更少。担心这会因为太多连接而使服务器崩溃! - Matt Facer

1

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

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


谢谢 - 我刚刚实现了SignalR库,它运行得很好。开始有些棘手,但希望今后这将是最好的方法 :) 谢谢。 - Matt Facer

0

我建议您查看一些消息总线框架,例如NServiceBus或开源MassTransit。它们位于(Microsoft Messaging Queue)MSMQ之上,使与其一起工作更加舒适。

与其每隔几秒钟轮询数据库,不如在写入DB时向所有订阅的客户端发送轻量级消息,这样客户端只对他们感兴趣的更改做出反应。此外,您可以使队列具有事务性,因此即使客户端离线/注销,也不会丢失任何消息。

(编辑后使文本可读...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接