当前位置:首页 > 技术积累 > 正文内容

ASP.NET实现HTTP长轮询(一)——WebForm

竹林之风5年前 (2019-06-10)技术积累2380

        本文主要描述如何在ASP.NET WebForm中实现长轮询:

(1)在ASP.NET WebForm的aspx文件中设置如下指令即可实现异步的ASP.NET WebForm:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LongPolling.aspx.cs" Inherits="LongPolling" Async="true" AsyncTimeout="60" %>

Async:是否异步WebForm,AsyncTimeout:异步超时时间(秒)。

(2)在aspx.cs文件中实现异步获取数据:

方式一:超过循环次数即退出(或使用Stopwatch计算时间,超时即退出)

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI;

public partial class LongPolling : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //注册异步任务
        this.Page.RegisterAsyncTask(new PageAsyncTask(GetData));
    }

    /// <summary>
    /// 获取数据
    /// </summary>
    /// <returns></returns>
    private async Task GetData()
    {
        int nowTimes = 0;//当前循环次数(或使用Stopwatch计算时间,超时即退出)
        int maxTimes = 60;//最大循环次数(或使用Stopwatch计算时间,超时即退出)
        while (++nowTimes <= maxTimes)//(或使用Stopwatch计算时间,超时即退出)
        {
            //判断是否已有新数据,若已有则退出循环并响应
            Thread.Sleep(100);
        }
    }
}

方式二:使用计时器

using System;
using System.Threading.Tasks;
using System.Web.UI;
using System.Timers;

public partial class LongPolling : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //注册异步任务
        this.Page.RegisterAsyncTask(new PageAsyncTask(GetData));
    }

    /// <summary>
    /// 获取数据
    /// </summary>
    /// <returns></returns>
    private async Task GetData()
    {
        int nowTimes = 0;//当前循环次数(或使用Stopwatch计算时间,超时即退出)
        int maxTimes = 60;//最大循环次数(或使用Stopwatch计算时间,超时即退出)

        //计时器,每1秒种触发一次Elapsed事件
        Timer timer = new Timer(1000);
        //订阅计时器的Elapsed事件    
        timer.Elapsed += (sender, e) =>
        {
            //判断是否已有新数据或超时,若是则停止计时器并响应
        };
        //启动计时器       
        timer.Start();
    }
}

(3)使用jQuery发送请求:

(function getData() {
    $.post('LongPolling.aspx', {}, function(data) {
        //接收并处理数据
        getData();
    });
})();

扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:https://www.9icode.com/index.php/post/16.html

标签: C#ASP.NET
分享给朋友:

相关文章

通用基础表逻辑设计(一)——配置、枚举和类别

通用基础表逻辑设计(一)——配置、枚举和类别

一、配置表        一个系统中往往有很多需要可自定义的参数,比如网站名称、联系地址等基础参数以及各种系统运行参数等等,这个时候就需要单独一个参数配置表来保...

HTTP长连接与短连接、长轮询与短轮询及长轮询的实现概述

HTTP长连接与短连接、长轮询与短轮询及长轮询的实现概述

        HTTP长连接(long connection)与短连接(short connection)本质上是TCP长连接和短连接:短连接是指在一次HTTP请求和响应之后立即关闭本次TCP连接,...

通用基础表逻辑设计(三)——功能权限

通用基础表逻辑设计(三)——功能权限

概述        在一个应用系统中有多个用户,用户通常分为多种角色,每种角色的用户能够访问的页面、能够查看的数据或者能够执行的操作等各有不同,因此需要设计与实...

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

ASP.NET网站自定义错误处理及其它安全相关

ASP.NET网站自定义错误处理及其它安全相关

        ASP.NET网站在运行过程中总是有可能报错,例如404等HTTP错误、500等程序异常。在IIS托管并报错的情况下,网站的默认行为依次是:(1).NET运行时接收并处理的部分显示.N...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。