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

竹林之风2年前技术积累1724

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

(1)控制器:

using System;
using System.Web.Http;
using System.Threading.Tasks;
using System.Threading;

public class LongPollingController : ApiController
{
        [NonAction]
        private BaseResponse GetData(object state, BaseRequest request)
        {
            BaseResponse response = new BaseResponse();

            int nowTimes = 0;//当前循环次数(或使用Stopwatch计算时间,超时即退出)
                        int maxTimes = 60;//最大循环次数(或使用Stopwatch计算时间,超时即退出)
                        while (++nowTimes <= maxTimes)//(或使用Stopwatch计算时间,超时即退出)
                        {
                            //判断是否已有新数据,若已有则退出循环
                            Thread.Sleep(100);
                        }
                        
            return response;
        }

        [HttpPost]
        public BaseResponse GetData(BaseRequest request)
        {
            Task<BaseResponse> task = new Task<BaseResponse>(new Func<object, BaseResponse>((state) => { return GetData(state, request); }), null);
            task.Start();
            return task.Result;
        }
}

(2)使用jQuery发送请求:

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

相关文章

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

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

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

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

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

        本文主要描述如何在ASP.NET WebForm中实现长轮询:(1)在ASP.NET WebForm的aspx文件中设置如下指令即可实现异步的A...

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

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

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

C#中问号“?”的用法

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

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

        本文主要描述如何在ASP.NET MVC中实现长轮询:(1)控制器继承AsyncController:using System.Thr...

发表评论    

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