ASP.NET实现HTTP长轮询(三)——MVC

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

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

(1)控制器继承AsyncController:

using System.Threading;
using System.Web.SessionState;

[SessionState(SessionStateBehavior.Disabled)]
public class LongPollingController : AsyncController
{
    public void GetData()
    {
        AsyncManager.OutstandingOperations.Increment();

        int nowTimes = 0;//当前循环次数(或使用Stopwatch计算时间,超时即退出)
        int maxTimes = 60;//最大循环次数(或使用Stopwatch计算时间,超时即退出)

        //计时器,每1秒种触发一次Elapsed事件
        Timer timer = new Timer(1000);
        //订阅计时器的Elapsed事件    
        timer.Elapsed += (sender, e) =>
        {
            //判断是否已有新数据或超时,若是则停止计时器并执行如下代码
            /*AsyncManager.Parameters["data"] = "Data";
            AsyncManager.OutstandingOperations.Decrement();*/
        };
        //启动计时器       
        timer.Start();        
    }

    //参数data来源于syncManager.Parameters["data"]
    private ActionResult GetDataCompleted(string data)
    {
        //响应
    }
}

(2)使用jQuery发送请求:

(function getData() {
    $.post('LongPolling/GetData', {}, function(data) {
        //接收并处理数据
        getData();
    });
})();
标签: C#ASP.NET

相关文章

C#中问号“?”的用法

        在C#中问号有单问号和双问号两种场景,其中单问号就是用于条件表达式的一个三元运算符;双问号有两个用法:可...

在线支付子模块的设计与实现

        一个在线交易系统需要各种支付方式方便客户付款,这些支付方式按场景可分为在线支付和线下现付。线下现付常见的...

ASP.NET实现HTTP长轮询(四)——WebApi

        本文主要描述如何在ASP.NET WebApi中实现长轮询:(1)控制器:using System; using Syst...

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

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的Status...

ASP.NET实现HTTP长轮询(二)——一般处理程序ashx

        本文主要描述如何在ASP.NET一般处理程序中实现长轮询:(1)实现IAsyncResult:using System; using...

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

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

发表评论    

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