一个非常简单的 ASP.NET MVC 示例:长轮询(又叫:反向 AJAX,英文名:Comet)实现
2013-03-26 17:22
447 查看
关于 长轮询(又叫:反向 AJAX,英文名:Comet)的介绍,请查看:反向Ajax,第1部分:Comet介绍
下面是代码实现:
UI:
后台代码:
运行效果图:
另一个示例:
查考自:.Net MVC 实现长轮询
谢谢浏览!
下面是代码实现:
UI:
<p> <input type="button" onclick="longPolling();" value="开始长轮询" /> </p> <div> <p> 服务器返回的信息: </p> <p id="msgContainer"> </p> </div> <script type="text/javascript"> function longPolling() { $.getJSON("@Url.Action("GetTime", "DateTime")", function (json) { $("#msgContainer").append(json.date + "<br/>"); longPolling(); }); } </script>
后台代码:
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<ActionResult> 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<ActionResult>(task => { string content = (string)AsyncManager.Parameters["content"]; return Content(content); }); } #endregion #region 方式 3 public Task<ActionResult> 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<ActionResult>(task => { return Content((string)task.Result); }); } #endregion } }
查考自:.Net MVC 实现长轮询
谢谢浏览!
相关文章推荐
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 用 ASP.NET MVC 实现基于 XMLHttpRequest long polling(长轮询) 的 Comet
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- 用 ASP.NET MVC 实现基于 XMLHttpRequest long polling(长轮询) 的 Comet
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- ASP.NET 非组件实现ajax简单示例
- ASP.NET WebForm 之 Ajax 请求后端处理 概述 ASP.NET 在MVC中的用途非常广泛,操作起来也非常简单。前台请求异步请求 Controlle
- ASP.NET MVC:示例编号mvc100010010,一个简单MVC示例
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
- asp.net mvc 简单实现一个账号只能在一个地方登录
- 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
- 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
- Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点
- jQuery + ASP.NET MVC Ajax的简单实现
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
- 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
- [Fine Uploader] 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
- ASP.NET MVC 4 插件化架构简单实现-思路篇
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler