• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼

    來源:懂視網 責編:小采 時間:2020-11-27 22:41:40
    文檔

    使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼

    使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼:這兩天在使用Asp.net MVC 4開發COMET消息通知機制,在后端使用異步線程對消息進行訂閱,客戶端通過AJAX長連接請求MVC中的ACTION,如:http://localhost/event/imageSet,即表示獲取ImageSet對象的變更消息(新增,更新和刪除消息)。 1.事件消息的類I
    推薦度:
    導讀使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼:這兩天在使用Asp.net MVC 4開發COMET消息通知機制,在后端使用異步線程對消息進行訂閱,客戶端通過AJAX長連接請求MVC中的ACTION,如:http://localhost/event/imageSet,即表示獲取ImageSet對象的變更消息(新增,更新和刪除消息)。 1.事件消息的類I

    這兩天在使用Asp.net MVC 4開發COMET消息通知機制,在后端使用異步線程對消息進行訂閱,客戶端通過AJAX長連接請求MVC中的ACTION,如:http://localhost/event/imageSet,即表示獲取ImageSet對象的變更消息(新增,更新和刪除消息)。

    1.事件消息的類IEventEntity<TEntity>類的定義

    代碼如下:
    public interface IEntityEvent<TEntity>
        {
            //變更的實體類對象
            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<ActionResult> ImageSet(int millisecondsTimeout = 10000)
            {
                return await this.EventAsync<ImageSetData>(millisecondsTimeout);
            }

            private async Task<ActionResult> EventAsync<TEntity>(int millisecondsTimeout)
            {
                IEntityEvent<TEntity> entityEvent = await EntityEventSubcriber.Instance.WaitForEntityEvent<TEntity>(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<T>結合來返回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()方法來進行消息獲取的循環。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼

    使用ASP.NET MVC 4 Async Action+jQuery實現消息通知機制的實現代碼:這兩天在使用Asp.net MVC 4開發COMET消息通知機制,在后端使用異步線程對消息進行訂閱,客戶端通過AJAX長連接請求MVC中的ACTION,如:http://localhost/event/imageSet,即表示獲取ImageSet對象的變更消息(新增,更新和刪除消息)。 1.事件消息的類I
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99热精品毛片全部国产无缓冲| 亚洲综合精品香蕉久久网97| 久久国产精品久久久| 久久九九久精品国产| 华人在线精品免费观看| 中文字幕精品亚洲无线码一区应用| 欧美精品国产一区二区| 无码囯产精品一区二区免费| 国内精品久久久久久久久| 欧美日韩精品乱国产538| 无码国产精品一区二区免费16 | 欧美日韩专区麻豆精品在线| 国产精品久久久久久搜索| 午夜精品射精入后重之免费观看| 国精品无码A区一区二区| 四虎最新永久在线精品免费| 国产精品无码午夜福利| 亚洲av成人无码久久精品| 欧美日韩成人精品久久久免费看 | 精品久久久久久久久久久久久久久| 久久精品国产影库免费看| 成人国产精品一区二区网站| 久久国产欧美日韩精品| 中文字幕无码精品亚洲资源网久久 | 国产A∨免费精品视频| 国产原创精品视频| 99热门精品一区二区三区无码| 精品国产三级a∨在线| 久久久国产精品亚洲一区| 日韩精品无码AV成人观看| 亚洲日韩精品射精日| 一本色道久久88—综合亚洲精品 | 亚洲av午夜精品一区二区三区| 久久久久这里只有精品| 国产在线精品观看免费观看| Xx性欧美肥妇精品久久久久久| 四虎成人www国产精品| 91精品啪在线观看国产电影| 99精品欧美一区二区三区| 国产叼嘿久久精品久久| 国内精品久久久久久不卡影院|