91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#用戶上下文WeixinContext和MessageContext怎么使用

發布時間:2022-06-15 13:42:19 來源:億速云 閱讀:162 作者:iii 欄目:開發技術

這篇文章主要介紹“C#用戶上下文WeixinContext和MessageContext怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C#用戶上下文WeixinContext和MessageContext怎么使用”文章能幫助大家解決問題。

概述

由于微信公眾平臺的特殊機制,所有的信息都由微信服務器轉發而來,因此服務器是無法使用Session對用戶會話的上下文進行管理的。

為此Senparc.WeiXin.MP SDK增加了上下文的模塊,并集成到了MessageHandler中。

WeixinContext

WeixinContext是所有單個用戶上下文(MessageContext)實體的容器(暫且稱為全局上下文)。WeixinContext本身不是靜態類,意味著您可以在同一個應用中創建多個上下文實體。

同時,一個靜態的WeixinContext實例被放入到MessageHandler<TM>中,因此所有項目中由MessageHandler<TM>派生的子類中的WeixinContext是唯一的、全局的(注:TM為實現IMessageContext的類,包括SDK中已經提供的MessageContext)。

因此我們在任何一個實現了MessageHandler<TM>的實例中(比如叫MyMessageHandler),都可以訪問到一個類型和名稱都叫WeixinContext的對象。

WeixinContext用于保存所用戶的上下文(MessageContext),并且提供了一系列的方法,主要方法包括:

        /// <summary>
        /// 重置所有上下文參數,所有記錄將被清空
        /// </summary>
        public void Restore()
        {
            ...
        }

        /// <summary>
        /// 獲取MessageContext,如果不存在,返回null
        /// 這個方法的更重要意義在于操作TM隊列,及時移除過期信息,并將最新活動的對象移到尾部
        /// </summary>
        /// <param name="userName">用戶名(OpenId)</param>
        /// <returns></returns>
        private TM GetMessageContext(string userName)
        {
            ...
        }

        /// <summary>
        /// 獲取MessageContext
        /// </summary>
        /// <param name="userName">用戶名(OpenId)</param>
        /// <param name="createIfNotExists">True:如果用戶不存在,則創建一個實例,并返回這個最新的實例
        /// False:用戶儲存在,則返回null</param>
        /// <returns></returns>
        private TM GetMessageContext(string userName, bool createIfNotExists)
        {
            ...
        }


        /// <summary>
        /// 獲取MessageContext,如果不存在,使用requestMessage信息初始化一個,并返回原始實例
        /// </summary>
        /// <returns></returns>
        public TM GetMessageContext(IRequestMessageBase requestMessage)
        {
            ...
        }

        /// <summary>
        /// 獲取MessageContext,如果不存在,使用requestMessage信息初始化一個,并返回原始實例
        /// </summary>
        /// <returns></returns>
        public TM GetMessageContext(IResponseMessageBase responseMessage)
        {
            ...
        }

        /// <summary>
        /// 記錄請求信息
        /// </summary>
        /// <param name="requestMessage">請求信息</param>
        public void InsertMessage(IRequestMessageBase requestMessage)
        {
            ...
        }

        /// <summary>
        /// 記錄響應信息
        /// </summary>
        /// <param name="responseMessage">響應信息</param>
        public void InsertMessage(IResponseMessageBase responseMessage)
        {
            ...
        }

        /// <summary>
        /// 獲取最新一條請求數據,如果不存在,則返回Null
        /// </summary>
        /// <param name="userName">用戶名(OpenId)</param>
        /// <returns></returns>
        public IRequestMessageBase GetLastRequestMessage(string userName)
        {
            ...
        }

        /// <summary>
        /// 獲取最新一條響應數據,如果不存在,則返回Null
        /// </summary>
        /// <param name="userName">用戶名(OpenId)</param>
        /// <returns></returns>
        public IResponseMessageBase GetLastResponseMessage(string userName)
        {
            ...
        }

WeixinContext中有兩個用于儲存用戶上下文的對象:MessageCollection及MessageQueue。

這兩個對象中的元素集合是重合的,但是MessageQueue對元素進行了排序,以便及時處理掉頂部過期的上下文。

ExpireMinutes用于定義上下文時間有效期,默認為90分鐘。可以在程序的任何地方設置設個參數,且立即生效。

PS:MessageQueue中刪除過期數據的邏輯以極高的效率運作,開發時無需考慮CPU占用及對象沖突的問題(額外校驗時間是否超時)。

MessageContext

MessageContext用于保存單個用戶的上下文信息,被儲存在WeixinContext的MessageCollection及MessageQueue對象中。 IMessageContext定義如下:

    public interface IMessageContext
    {
        /// <summary>
        /// 用戶名(OpenID)
        /// </summary>
        string UserName { get; set; }
        /// <summary>
        /// 最后一次活動時間(用戶主動發送Resquest請求的時間)
        /// </summary>
        DateTime LastActiveTime { get; set; }
        /// <summary>
        /// 接收消息記錄
        /// </summary>
        List<IRequestMessageBase> RequestMessages { get; set; }
        /// <summary>
        /// 響應消息記錄
        /// </summary>
        List<IResponseMessageBase> ResponseMessages { get; set; }
        /// <summary>
        /// 臨時儲存數據,如用戶狀態等,出于保持.net 3.5版本,這里暫不使用dynamic
        /// </summary>
        object StorageData { get; set; }
    }

您可以根據自己的需要創建自己的類,實現這個接口,并且被WeixinContext使用。當然如果你的要求不是那么特殊,而且你比較懶的話,SDK提供了一個默認的MessageContext實現:

    /// <summary>
    /// 微信消息上下文(單個用戶)
    /// </summary>
    public class MessageContext : IMessageContext
    {
        public string UserName { get; set; }
        public DateTime LastActiveTime { get; set; }
        public List<IRequestMessageBase> RequestMessages { get; set; }
        public List<IResponseMessageBase> ResponseMessages { get; set; }

        public object StorageData { get; set; }

        public MessageContext()
        {
            /*
             * 注意:即使使用其他類實現IMessageContext,
             * 也務必在這里進行下面的初始化,尤其是設置當前時間,
             * 這個時間關系到及時從緩存中移除過期的消息,節約內存使用
             */
            RequestMessages = new List<IRequestMessageBase>();
            ResponseMessages = new List<IResponseMessageBase>();
            LastActiveTime = DateTime.Now;
        }
    }

上面的代碼根據注釋很好理解,需要說明一下的是StorageData。這是一個用于儲存任何和用戶上下文有關數據的容器,WeixinContext和IMessageContext沒有對它進行任何引用,完全由開發者決定里面的內容(比如用戶執行到哪一步、或某個比較重要的位置信息等等),類似于Session的作用。

關于“C#用戶上下文WeixinContext和MessageContext怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉安县| 望都县| 临沂市| 林西县| 霍山县| 兴国县| 舒兰市| 麦盖提县| 应用必备| 利辛县| 杭锦后旗| 隆子县| 石景山区| 阳春市| 弥渡县| 闽清县| 自贡市| 高平市| 宁化县| 上栗县| 什邡市| 合作市| 关岭| 凤山市| 灵台县| 民丰县| 贵德县| 临漳县| 聂拉木县| 石泉县| 福贡县| 班戈县| 汤阴县| 新密市| 无锡市| 弋阳县| 澳门| 牟定县| 田林县| 天津市| 石门县|