使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码 您所在的位置:网站首页 mvp架构实例 使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码

使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码

2023-02-28 21:40| 来源: 网络整理| 查看: 265

这两天在使用Asp.net MVC 4开发COMET消息通知机制,在后端使用异步线程对消息进行订阅,客户端通过AJAX长连接请求MVC中的ACTION,如:http://localhost/event/imageSet,即表示获取ImageSet对象的变更消息(新增,更新和删除消息)。

1.事件消息的类IEventEntity类的定义

复制代码 代码如下:

public interface IEntityEvent

{

//变更的实体类对象

TEntity[] Entities

{

get;

}

//操作类型

EntityEventType Type

{

get;

}

}

public enum EntityEventType : int

{

Create = 0,

Update = 1,

Removed = 2

}

2.EntityEventController类

复制代码 代码如下:

[SessionState(SessionStateBehavior.ReadOnly)]

public class EntityEventController : Controller

{

//异步获取对ImageSet对象操作的变更事件Action,millsecondsTimeout为超时时间。

public async Task ImageSet(int millisecondsTimeout = 10000)

{

return await this.EventAsync(millisecondsTimeout);

}

private async Task EventAsync(int millisecondsTimeout)

{

IEntityEvent entityEvent = await EntityEventSubcriber.Instance.WaitForEntityEvent(millisecondsTimeout);

return this.Json(new

{

HasEvent = null != entityEvent,

EntityEvent = entityEvent

}, JsonRequestBehavior.AllowGet);

}

}

(1)这里使用到了.Net Framework 4.5中使现异步asp.net mvc async action(可以参考:Using Asynchronous Methods in ASP.NET MVC 4 技术文章)的技术,其中方法前的async关键字可以和Task对象进行配合使用,表示该方法为异步方法,由编译器生成运行时所需的相关异步操作的逻辑代码,另外方法中必须使用到await语句来等待一个异步操作的结束,await和Task结合来返回Task完成的Result

(2) 如果Controller层面应用或者Filter中操作过Session,那么为了避免长链接时不会导至同一Session在其他调用中Session Block的情况,需要在Controller头上加入[SessionState(SessionStateBehavior.ReadOnly)] 的Attribute,来表示当前Controller对Session为只读操作,这样就其他操作就不会被阻塞了。

3.这里就不具体写EntityEventSubscriber消息订阅器的代码了,以后将在“消息订阅与发布”的文章中详细描述。

4.jQuery AJAX客户端代码

复制代码 代码如下:

$(document).ready(function () {

var $hoverList = $("#imageSets").hoverList({title:"图片集列表", selectedIndex: 1 });

var getEvent = function(){

var getPattern = "/EasyshirtBackend/imageSet/0";

$.getJSON("/EasyshirtBackend/event/imageSet/100000" , function(data){

if(data.HasEvent){

//Create

if(data.EntityEvent.Type == 0){

$.each(data.EntityEvent.Entities, function(i, entity){

//TODO: 处理实体类新增

if(i == data.EntityEvent.Entities.length - 1){

getEvent();

}

});

return;

}

//Update

if(data.EntityEvent.Type == 1){

$.each(data.EntityEvent.Entities, function(i, entity){

//TODO: 处理实体类更新

if(i == data.EntityEvent.Entities.length - 1){

getEvent();

}

});

return;

}

//Delete

if(data.EntityEvent.Type == 2){

$.each(data.EntityEvent.Entities, function(i, entity){

//TODO: 处理实体类删除

if(i == data.EntityEvent.Entities.length - 1){

getEvent();

}

});

}

}else{

$("#imageSets").hoverList("add", data);

getEvent();

}

});

};

getEvent();

});

代码中主要需要控制住在一次获得消息(无论是有消息还是无消息),都需要在恰当的时机现一次的调用getEvent()方法来进行消息获取的循环。

【使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码】相关文章:

★ ASP.NET 高性能分页代码

★ ASP.NET弹出消息框、确认框的代码收集

★ .NET 2.0 的压缩功能代码

★ ASP.NET DataTable去掉重复行的2种方法

★ ASP.NET实现推送文件到浏览器的方法

★ 应用Response.Write实现带有进度条的多文件上传

★ asp.net repeater实现批量删除时注册多选框id到客户端

★ ASP.NET+Web服务实现软件共享

★ ASP.NET抓取网页内容的实现方法

★ ASP.NET c#生成随机数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有