博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个非常简单的 ASP.NET MVC 示例:长轮询(又叫:反向 AJAX,英文名:Comet)实现...
阅读量:4631 次
发布时间:2019-06-09

本文共 3344 字,大约阅读时间需要 11 分钟。

关于 长轮询(又叫:反向 AJAX,英文名:Comet)的介绍,请查看:

下面是代码实现:

UI:

服务器返回的信息:

 

后台代码:

public class DateTimeController : AsyncController{    public DateTimeController()    {    }    public void GetTimeAsync()    {        //计时器,5秒种触发一次Elapsed事件                System.Timers.Timer timer = new System.Timers.Timer(5000);        //告诉.NET接下来将进行一个异步操作               AsyncManager.OutstandingOperations.Increment();        //订阅计时器的Elapsed事件            timer.Elapsed += (sender, e) =>        {            //保存将要传递给GetTimeCompleted的参数                            AsyncManager.Parameters["nowdate"] = e.SignalTime;            //告诉ASP.NET异步操作已完成,进行GetTimeCompleted方法的调用                           AsyncManager.OutstandingOperations.Decrement();        };        //启动计时器               timer.Start();    }    public ActionResult GetTimeCompleted(DateTime nowdate)    {        return Json(new { date = nowdate.ToString("HH:mm:ss") + "  Welecom " }, JsonRequestBehavior.AllowGet);    }}

运行效果图:

另一个示例:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Threading.Tasks;using System.IO;namespace TestMvc.MvcUI.Controllers{    public class ArticleController : AsyncController    {        #region 方式 1        public void ArticleAsync(string name)        {            AsyncManager.OutstandingOperations.Increment();            Task.Factory.StartNew(() =>                {                    string path = ControllerContext.HttpContext.Server.MapPath(string.Format(@"\articles\{0}.html", name));                    using (StreamReader reader = new StreamReader(path))                    {                        AsyncManager.Parameters["content"] = reader.ReadToEnd();                    }                    AsyncManager.OutstandingOperations.Decrement();                });        }        public ActionResult ArticleCompleted(string content)        {            return Content(content);        }        #endregion        #region 方式 2        public Task
Article(string name) { return Task.Factory.StartNew(() => { string path = ControllerContext.HttpContext.Server.MapPath(string.Format(@"\articles\{0}.html", name)); using (StreamReader reader = new StreamReader(path)) { AsyncManager.Parameters["content"] = reader.ReadToEnd(); } }).ContinueWith
(task => { string content = (string)AsyncManager.Parameters["content"]; return Content(content); }); } #endregion #region 方式 3 public Task
Article2(string name) { return Task.Factory.StartNew(() => { string path = ControllerContext.HttpContext.Server.MapPath(string.Format(@"\articles\{0}.html", name)); using (StreamReader reader = new StreamReader(path)) { return reader.ReadToEnd(); } }).ContinueWith
(task => { return Content((string)task.Result); }); } #endregion }}

 

查考自:

谢谢浏览!

转载于:https://www.cnblogs.com/Music/archive/2013/03/26/comet-demo-in-asp-net-mvc.html

你可能感兴趣的文章
redis-trib构建集群
查看>>
《白帽子》里面的安全三要素
查看>>
大型运输行业实战_day04_2_高级查询
查看>>
Visual.Basic.6大学教程pdf
查看>>
像计算机科学家一样思考Python pdf
查看>>
计算广告 互联网商业变现的市场与技术.pdf
查看>>
C++ typedef小结(转载)
查看>>
hdu 4612 Warm up 桥缩点
查看>>
类类型
查看>>
【树论 倍增】51nod1709 复杂度分析
查看>>
【树链剖分 ODT】cf1137F. Matches Are Not a Child's Play
查看>>
Yii CModel中rules验证规格
查看>>
asp.net实现数据库备份还原功能
查看>>
java高cpu占用和高内存占用
查看>>
ASP.NET 页面之间传值的几种方式
查看>>
华为笔试(1)
查看>>
Python小程序collatz
查看>>
功能键1,输出所有所查信息的记录
查看>>
简单模拟flume
查看>>
SQL Server 事务日志文件已满,收缩日志文件(9002)
查看>>