• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码

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

    1.事件消息的类IEventEntityTEntity>类的定义

    复制代码 代码如下:

    public interface IEntityEventTEntity>
        {
            //变更的实体类对象
            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 TaskActionResult> ImageSet(int millisecondsTimeout = 10000)
            {
                return await this.EventAsyncImageSetData>(millisecondsTimeout);
            }

            private async TaskActionResult> EventAsyncTEntity>(int millisecondsTimeout)
            {
                IEntityEventTEntity> entityEvent = await EntityEventSubcriber.Instance.WaitForEntityEventTEntity>(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和TaskT>结合来返回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()方法来进行消息获取的循环。

    您可能感兴趣的文章:
    • JQuery的Alert消息框插件使用介绍
    • 基于jQuery的message插件实现右下角弹出消息框
    • jquery插件jquery.confirm弹出确认消息
    • 基于JQuery 的消息提示框效果代码
    • jquery判断浏览器后退时候弹出消息的方法
    • Notify - 基于jquery的消息通知插件
    • jQuery实现鼠标移到元素上动态提示消息框效果
    • 基于jQuery的弹出消息插件 DivAlert之旅(一)
    • 让新消息在网页标题闪烁提示的jQuery代码
    • jquery自定义显示消息数量
    上一篇:datagrid行内按钮(更新/删除等)操作实现代码
    下一篇:HttpWebRequest的常见错误使用TcpClient可避免
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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