麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

我們一起學習WCF第八篇回調函數

2019-11-14 15:53:58
字體:
來源:轉載
供稿:網友

  什么是回調函數?

一個簡單的例子:小明想要在京東購買一件商品。他會登陸網站選好自己的商品。然后他把這件商品放在購物車,然后開始付錢(這個表示觸發,不付錢不發貨(排除貨到付款))。然后京東的人員收到了小明這個買商品的信號,就開始發貨,選好貨品之后委托快遞人員送到小明手里。這就是回調。

現在我用例子詳細看看回調函數到底怎么編寫的,先看UML圖

開始編碼:

 第一步:創建一個契約

 [ServiceContract(sessionMode = SessionMode.Required)]   public interface ISessionService    {        [OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)]        void CallBackStart();        [OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = true)]        void CallBackEnd();    }

注釋1:IsInitiating = true表示開啟會話 IsTerminating =true表示收到消息后(如果存在)就關閉會話

第二步:實現契約

 PRivate Timer myTimer = null;        Random rd = new Random();        private IcallBack cb;        public void CallBackStart()        {            cb = OperationContext.Current.GetCallbackChannel<IcallBack>();            Console.WriteLine("會話ID{0}", OperationContext.Current.SessionId);            myTimer = new Timer(2000);                       myTimer.Elapsed += new ElapsedEventHandler(Start);            myTimer.Enabled = true;        }        public void Start(object sender, ElapsedEventArgs e)        {            cb.CallBack(rd.Next(1, 1000000));        }       public void Dispose()        {            myTimer.Dispose();            Console.WriteLine("服務實例已釋放     {0}", DateTime.Now.ToString());          }             public void CallBackEnd()        {         Console.WriteLine("{0}:會話即將停止。",OperationContext.Current.SessionId);        }    }

注釋2:Timer是一個定時器顯示 用random產生隨機數。

第三步:創建一個回調接口

 [ServiceContract]    public interface IcallBack    {        [OperationContract(IsOneWay = true)]        void CallBack(int Value);    }

第四步:客戶端實現回調接口

首先客戶端建一個類實現回調接口但是我們發現報下列一個錯誤

最后檢查發現服務端 并沒有加上回調接口然后我們在契約在加上CallbackContract=typeof(IcallBack)然后在進行引用發現沒有問題了

  public event EventHandler CallBackEvent;       public void CallBack(int Value)       {           if (CallBackEvent != null)           {               TimeEventArg Tea = new TimeEventArg();               Tea.Value = Value.ToString();               CallBackEvent(this,Tea);           }       }

注釋3:CallBackEvent是我們定義的一個事件,進行把服務器傳來的數值返回給客戶端

第五步:客戶端進行調用

 ConClient.SessionServiceClient Client = null;            CallBackHandler cbk = new CallBackHandler();            cbk.CallBackEvent += cb_ValueCallbacked;            Console.WriteLine("請選擇會話模式:0表示開始,1表示關閉");            while(true)            {                string SessionMode = Console.ReadLine();                if (SessionMode == "0")                {                    Client = new ConClient.SessionServiceClient(new System.ServiceModel.InstanceContext(cbk));                    Client.CallBackStart();                }                else if(SessionMode=="1")                {                    if (Client != null)                    {                        Client.CallBackEnd();                    }                }            }                   }        public static void cb_ValueCallbacked(object sender,EventArgs e)        {            Console.ForegroundColor = ConsoleColor.Green;            TimeEventArg Tea = new TimeEventArg();            Tea = (TimeEventArg)e;            Console.WriteLine(Tea.Value);        }

最后我們看運行結果

服務端:

客戶端:

回調就講到這里了。

源碼

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 老女人碰碰在线碰碰视频 | 久久久久99999 | 久久国产免费 | japanesexxxxxxxhd| 成人免费自拍视频 | 92精品国产自产在线 | 黄a大片 | av在线播放地址 | 国产手机国产手机在线 | 国产宾馆3p国语对白 | 国产午夜精品一区二区三区在线观看 | 午夜视频中文字幕 | 97视频| 海外中文字幕在线观看 | 中文字幕在线观看免费 | 欧美视频99 | 一级黄色片在线看 | 国产三级午夜理伦三级 | 中文字幕精品一区久久久久 | 亚洲影视在线 | 韩国精品视频在线观看 | 妇女毛片| 久草网在线| 中文字幕在线观看国产 | 国产精品爱久久久久久久 | av视屏 | 国产乱淫av片免费网站 | 一区二区三区在线播放视频 | 成人一级黄色大片 | 国产成人精品免费视频大全最热 | 黄色国产在线观看 | 最新av网址在线观看 | 国产一区二区视频在线播放 | 牛牛碰在线视频 | 爱操av| sm高h视频| 欧美一区二区网站 | 青青草国产在线视频 | 欧美成人精品不卡视频在线观看 | 亚洲国产视频网 | 在线免费观看毛片视频 |