成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF回調操作是雞應用技巧講解

開發 開發工具
我們今天將會在這篇文章中為大家詳細介紹一下有關WCF回調操作的一些必要條件,以及相關操作方法,希望能給大家帶來些幫助。

WCF開發插件對于開發人員來說是一個比較重要的應用工具,可以幫助我們輕松的實現一些特定的功能需求。在這里我們就一起來分享一下有關WCF回調操作的相關操作技巧。WCF回調操作簡單的說就是由服務端來調用客戶端的方法,回調時原先的服務端和客戶端將發生對調,服務端成為客戶端,客戶端成為服務端。#t#

WCF回調的必要條件:

1、并不是所有的綁定都支持回調操作,只有具有雙向通信能力的綁定才可以使用回調。比如HTTP是與連接無關的因此不能用于回調。這就說明我們不能使用BasicHttpBinding或WSHttpBinding進行回調。WCF中NetTcpBinding和 NetNamedPipeBinding支持回調,因為從本質上講TCP和IPC協議支持雙向通信。WCF中wsDualHttpBinding也是支持回調的因為它實際上是設置了兩個HTTP通道

定義回調契約

一個服務契約若要定義回調,必須專門定義一個用于回調的契約。一個服務契約最多包含一個回調契約,一個服務契約一旦定義了回調契約那客戶端必須支持這個WCF回調操作。那如何為一個服務契約定義回調呢?使用ServiceContract特性的CallBackContract特性,代碼如下:

 

  1. [ServiceContract(CallbackContract = typeof(ISomeCallbackContract))]  
  2. public interface IService1  
  3. {  
  4. [OperationContract(IsOneWay=true)]  
  5. void DoSomething();  
  6. }  
  7. //用于回調的契約  
  8. interface ISomeCallbackContract  
  9. {  
  10. [OperationContract(IsOneWay=true)]  
  11. void SomeCallbackMethod();  
  12. [OperationContract(IsOneWay = true)]  
  13. void SomeCallbackMethod2();  

客戶端WCF回調操作設置

客戶端需要實現服務端定義的那個用于回調的契約ISomeCallbackContract,然后實例化回調對象再通過它創建一個上下文對象InstanceContext。然后用代理把這個回調的引用傳回服務端

下面通過代碼實例說明:

服務端代碼:

 

  1. [ServiceContract(CallbackContract = typeof(ISomeCallbackContract))]  
  2. public interface IService1  
  3. {  
  4. [OperationContract(IsOneWay=true)]  
  5. void DoSomething();  
  6. }  
  7. //用于回調的契約  
  8. interface ISomeCallbackContract  
  9. {  
  10. [OperationContract(IsOneWay=true)]  
  11. void SomeCallbackMethod();  
  12. [OperationContract(IsOneWay = true)]  
  13. void SomeCallbackMethod2();  

實現服務的類:

 

  1. [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, 
    ConcurrencyMode = ConcurrencyMode.Reentrant)]  
  2. public class Service1 : IService1  
  3. {  
  4. static List<ISomeCallbackContract> m_Callbacks = new 
    List
    <ISomeCallbackContract>();  
  5. public void DoSomething()  
  6. {  
  7. //獲得由客戶端傳入的回調終結點的引用,使用這個引用可以調用客戶端方法  
  8. ISomeCallbackContract callback = OperationContext.Current.
    GetCallbackChannel
    <ISomeCallbackContract>();  
  9. if (m_Callbacks.Contains(callback) == false)  
  10. {  
  11. m_Callbacks.Add(callback);  
  12. }  
  13. Trace.WriteLine("DoSomething");  
  14. //調用客戶端實現的SomeCallbackMethod2方法,  
  15. callback.SomeCallbackMethod2();  
  16. CallClients();  
  17. }  
  18. static public void CallClients()  
  19. {  
  20. Action<ISomeCallbackContract> invoke = 
    delegate(ISomeCallbackContract callback)  
  21. {  
  22. callback.SomeCallbackMethod();  
  23. };  
  24. m_Callbacks.ForEach(invoke);  
  25. }  

客戶端代碼:

 

  1. //客戶端實現回調接口,使用VS自動生成代理的時候,對于回調接口的命名默認是
    以服務契約接口名稱+Callback,而不是原先在服務端定義的回調接口的名子  
  2. public class CallBack : ServiceReferenceCallBack.IService1Callback  
  3. {  
  4. public void SomeCallbackMethod()  
  5. {  
  6. MessageBox.Show("SomeCallbackMethod()", "MyClient");  
  7. }  
  8. public void SomeCallbackMethod2()  
  9. {  
  10. MessageBox.Show("SomeCallbackMethod2()", "MyClient");  
  11. }  

客戶端調用

首先生成回調接口實現的對象,然后用這個對象去實例化一個上下文對象context ,在創建客戶端代理對象的時候在構造方法中使用這個上下文對象context 就可以把客戶端回調對象的引用作為消息的一部分傳送到服務端,在服務端就可以通過 OperationContext.Current.GetCallbackChannel<ISomeCallbackContract> ()來獲得這個回調對象的引用,服務端有了這個回調對象的引用就可以去調用客戶端實現的WCF回調操作方法。

 

  1. ServiceReferenceCallBack.IService1Callback callback = new CallBack();  
  2. InstanceContext context = new InstanceContext(callback);  
  3. ServiceReferenceCallBack.Service1Client sc = new 
    WCFPrograme.ServiceReferenceCallBack.Service1Client(context);  
  4. sc.DoSomething(); 

 

責任編輯:曹凱 來源: 豆豆網
相關推薦

2009-12-22 19:00:08

WCF回調

2010-02-22 16:19:25

WCF自托管

2009-12-21 14:49:27

2010-02-23 14:17:20

WCF配置文件

2010-02-26 13:40:28

WCF消息頭

2010-02-23 09:44:12

WCF dataCon

2009-11-06 16:13:45

WCF回調

2009-12-22 19:14:36

WCF效率

2010-02-23 10:57:34

WCF Streami

2010-02-23 14:03:53

WCF契約回調

2009-12-08 13:46:16

Silverlight

2010-02-22 11:25:50

WCF DateSet

2010-02-24 15:20:23

WCF Message

2010-02-24 13:48:44

MSMQ使用WCF

2010-02-22 16:26:47

WCF傳輸數據

2010-03-01 13:06:49

WCF繼承

2010-02-24 09:38:58

WCF應用編碼

2009-11-09 15:58:07

WCF回調方法

2009-12-08 15:52:10

WCF回調

2009-12-21 18:46:50

WCF傳輸大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕国产日韩 | 精品久久网 | 免费在线观看黄视频 | 91性高湖久久久久久久久_久久99 | 99精品视频一区二区三区 | 91久久北条麻妃一区二区三区 | www.蜜桃av | 久久免费精品 | 国产精品精品久久久久久 | 一级毛片高清 | 午夜小视频免费观看 | 在线观看黄免费 | 91精品国产一区二区三区 | 免费一区二区 | 久久久91 | 亚洲一区免费视频 | 这里只有精品99re | 狠狠的干 | 91精品中文字幕一区二区三区 | 国产ts人妖一区二区三区 | 日日摸日日碰夜夜爽2015电影 | 免费国产一区 | 日批日韩在线观看 | 午夜电影日韩 | 中国三级黄色录像 | 久久精品这里 | 国产一区二区自拍 | 亚洲 欧美 精品 | 天天干视频网 | 欧洲精品视频一区 | 欧美日韩中文字幕 | 日本亚洲欧美 | 国产女人第一次做爰毛片 | 国产精品欧美一区二区 | 99精品电影| 丝袜一区二区三区 | 国产激情视频网站 | 在线黄色影院 | 亚洲电影在线播放 | 日韩综合一区 | 亚洲精品自拍 |