0

我正在一个 asp.net 网站上实现自动刷新功能。

用户在网站上进行登录,如果他转到特定页面,其中有一个需要刷新的表,则会创建一个刷新表的计时器。

但是当用户注销或会话到期时,计时器会继续运行。现在乘以 X 个用户,我们将在服务器上运行 X 个计时器。

当不再需要计时器时,摆脱它们的最佳方法是什么?

到目前为止,我的代码如下:

protected static System.Timers.Timer _timer;

protected void Page_Load(object sender, EventArgs e)
{
    ...
    ServiceStatus serv = new ServiceStatus();
    OutSubscricoesInfoV2 subscr = new OutSubscricoesInfoV2();
    serv = StreamerUtils.GetSubscricoesStreamer(ref subscr);

    if (serv != null && serv.success)
    {
        StreamerUtils.StreamerState strState = StreamerUtils.GetStreamerState(subscr);

        if (strState != null && strState.IsActive)
        {
            startAutoRefresh();
        }
    }

}

private void startAutoRefresh()
{
    if (Session["RefreshTimer"] == null)
    {
        _timer = new System.Timers.Timer(10000);

        _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        _timer.Enabled = true;

        Session["RefreshTimer"] = _timer;
    }
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    //TODO: call refresh function
}

在我的页面中,我有以下按钮,用户可以单击该按钮来刷新表格:

<asp:ImageButton runat="server" ID="RefreshCot" OnClientClick="javascript:StocksListControl.TriggerPostBack(); return false;" CausesValidation="false" ImageUrl="/_layouts/images/refresh-title.png" />
4

1 回答 1

0

我同意 Aristos 对您的问题发表的第一条评论,这是糟糕的设计。对于这种情况,我建议三个选项:

  1. 使用 asp.net Ajax 控件。一个例子可以在这里找到:http ://www.tutorialspoint.com/asp.net/asp.net_ajax_control.htm
  2. AJAX 轮询 - 在 JavaScript 中有计时器,它将位于客户端上。一旦计时器经过了其经过的时间,客户端将向服务器发出 AJAX 请求(最好调用 Web 服务)以获取更新的数据。我建议为此使用 JavaScript 库,例如 JQuery。在这里可以找到有关其 ajax 功能的文档:http: //api.jquery.com/jQuery.ajax/
  3. 考虑使用提供实时功能的库,例如 SignalR,这里是库站点的链接: http ://signalr.net/

现在谈谈个人意见;在所有 3 个选项中,第 3 个将为您提供最“优雅”的解决方案。第一个选项将要求您使用 asp.net AJAX 控件,这些控件会生成丑陋的 HTML,并且可能会很麻烦。此外,将创建客户端上的计时器,以消除真正的“实时”方面。第二个选项将再次在客户端上放置计时器,删除真正的“实时”方面。第三个选项,将允许服务器“知道”连接的客户端,数据应通过使用“集线器”推送到客户端(如果可用)。

虽然您正处于学习曲线的十字路口,但我还建议您研究一些客户端 JavaScript 设计模式,以帮助您在客户端构建代码。一个很好的工具可能是 Knockout,在这里可以找到:

http://knockoutjs.com/index.html

这是有关如何将其与 SignalR 一起使用的教程:

http://www.codeproject.com/Articles/322154/ASP-NET-MVC-SIngalR-and-Knockout-based-Real-time-U

本教程侧重于使用 ASP.NET MVC。我想这应该可以与 Web 表单互换,但是,如果您可以使用该选项,我建议您也使用 MVC。

于 2013-06-25T14:48:03.177 回答