<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        使用ASP.NET MVC 4 Async Action+jQuery實(shí)現(xiàn)消息通知機(jī)制的實(shí)現(xiàn)代碼

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:41:40
        文檔

        使用ASP.NET MVC 4 Async Action+jQuery實(shí)現(xiàn)消息通知機(jī)制的實(shí)現(xiàn)代碼

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

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

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

        代碼如下:
        public interface IEntityEvent<TEntity>
            {
                //變更的實(shí)體類對象
                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中使現(xiàn)異步asp.net mvc async action(可以參考:Using Asynchronous Methods in ASP.NET MVC 4 技術(shù)文章)的技術(shù),其中方法前的async關(guān)鍵字可以和Task對象進(jìn)行配合使用,表示該方法為異步方法,由編譯器生成運(yùn)行時所需的相關(guān)異步操作的邏輯代碼,另外方法中必須使用到await語句來等待一個異步操作的結(jié)束,await和Task<T>結(jié)合來返回Task完成的Result

        (2) 如果Controller層面應(yīng)用或者Filter中操作過Session,那么為了避免長鏈接時不會導(dǎo)至同一Session在其他調(diào)用中Session Block的情況,需要在Controller頭上加入[SessionState(SessionStateBehavior.ReadOnly)] 的Attribute,來表示當(dāng)前Controller對Session為只讀操作,這樣就其他操作就不會被阻塞了。

        3.這里就不具體寫EntityEventSubscriber消息訂閱器的代碼了,以后將在“消息訂閱與發(fā)布”的文章中詳細(xì)描述。

        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: 處理實(shí)體類新增

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

                                        getEvent();
                                    }
                                });

                                return;
                            }

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

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

                                    //TODO: 處理實(shí)體類更新

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

                                        getEvent();
                                    }
                                });

                                return;
                            }


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

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

                                    //TODO: 處理實(shí)體類刪除

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

                                        getEvent();
                                    }
                                });
                            }

                        }else{

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

                getEvent();
            });

        代碼中主要需要控制住在一次獲得消息(無論是有消息還是無消息),都需要在恰當(dāng)?shù)臅r機(jī)現(xiàn)一次的調(diào)用getEvent()方法來進(jìn)行消息獲取的循環(huán)。

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

        文檔

        使用ASP.NET MVC 4 Async Action+jQuery實(shí)現(xiàn)消息通知機(jī)制的實(shí)現(xiàn)代碼

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久免费看黄a级试看 | 一级做a爰片久久毛片免费陪 | 成人A级毛片免费观看AV网站| 在线看片人成视频免费无遮挡| 国产亚洲AV夜间福利香蕉149 | 亚洲av无码国产精品色午夜字幕| 2019亚洲午夜无码天堂| 国产精品高清免费网站| 久久精品国产亚洲7777| 亚洲性无码AV中文字幕| 中文字幕不卡高清免费| 亚洲AV无码成人网站久久精品大| 亚洲国产精品无码久久98| 免费大香伊蕉在人线国产| 精品成人一区二区三区免费视频 | 毛片免费在线观看| 亚洲av午夜成人片精品网站| 免费观看在线禁片| 亚洲六月丁香六月婷婷色伊人 | 日本亚洲色大成网站www久久| 日韩av无码免费播放| 亚洲国产综合无码一区二区二三区| 亚洲综合一区二区精品久久| 免费H网站在线观看的| 亚洲精品无码成人| 亚洲色偷拍区另类无码专区| 亚洲熟妇成人精品一区| 国产高清免费在线| 亚洲一区二区三区在线观看蜜桃 | 无码av免费毛片一区二区| 亚洲精品自在在线观看| 粉色视频成年免费人15次| 亚洲中文字幕无码一区| 瑟瑟网站免费网站入口| 精品亚洲永久免费精品| 国产卡二卡三卡四卡免费网址| 噜噜噜亚洲色成人网站∨| 成年人网站在线免费观看| 巨胸喷奶水视频www免费视频| 亚洲国产精品日韩| 免费人成大片在线观看播放电影|