自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF回調(diào)契約如何進行正確定義

開發(fā) 開發(fā)工具
如果我們想在程序中對WCF回調(diào)契約進行定義,那么正確的操作方法應(yīng)該是如何的呢?在這里將會針對這一問題進行詳細(xì)講解。

WCF作為一款功能強大的.NET Framework 3.5的重要組成部件,它的出現(xiàn)為開發(fā)人員帶來了非常大的好處。今天就先為大家講解一下WCF回調(diào)契約的相關(guān)定義方式。一個服務(wù)契約最多只能包含一個WCF回調(diào)契約。通過ServiceContract特性,可以指定回調(diào)契約:

  1. interface ISomeCallbackContract   
  2. {   
  3. [OperationContract] void OnCallback( );   
  4. }   
  5. [ServiceContract(CallbackContract = typeof(ISomeCallbackContract))]   
  6. interface IMyContract {   
  7. [OperationContract] intDoSomething( );   
  8. }  

WCF回調(diào)契約無須標(biāo)記ServiceContract特性,但是在回調(diào)契約中必須為服務(wù)的操作標(biāo)記OperationContract特性。

在導(dǎo)入回調(diào)契約的元數(shù)據(jù)中,回調(diào)契約以Callback結(jié)尾。為簡便起見,我們在定義回調(diào)契約時,***以Callback為后綴。

為了托管一個回調(diào)對象,客戶端需要實例化回調(diào)對象,然后通過它創(chuàng)建一個上下文對象:

  1. class MyCallback : IMyContractCallback {   
  2. public void OnCallback( )   
  3. {...}   
  4. }   
  5. IMyContractCallback callback = new MyCallback( );   
  6. InstanceContext context = new InstanceContext(callback);  

假定客戶端的代理類為MyContractClient,則在客戶端就可以通過上下文對象獲得代理對象:

  1. MyContractClient proxy = new MyContractClient(context);  

注意,如果使用了WCF回調(diào)契約,則客戶端生成的代理類必須繼承自DuplexClientBase<T>代理類,這是一個專門的支持雙向通信的代理類。注意,該類的構(gòu)造函數(shù)參數(shù)既可以接收InstanceContext類型的上下文對象,也可以接收object類型的回調(diào)契約對象。

然而,如果是通過SvcUtil或Visual Studio 2005生成的代理,卻不能使用接收object類型對象的構(gòu)造函數(shù),若要創(chuàng)建代理對象,我們必須先創(chuàng)建上下文對象,如前面的代碼所示。

我們可以手動修改代理類,添加對它的支持,如下所示:

  1. partial class MyContractClient : DuplexClientBase
    <IMyContract>,IMyContract   
  2. {   
  3. public MyContractClient(object callbackInstance) : 
    base(callbackInstance) {} //More constructors   
  4. public void DoSomething( ) { Channel.DoSomething( );   
  5. }  
  6. }   
  7. class MyClient : IMyContractCallback,IDisposable   
  8. {   
  9. MyContractClient m_Proxy;   
  10. public void CallService( )   
  11. {   
  12. m_Proxy = new MyContractClient(this);  
  13.  m_Proxy.DoSomething( );   
  14. }  
  15.  public void OnCallback( )   
  16. {...}   
  17. public void Dispose( )   
  18. {   
  19. m_Proxy.Close( );   
  20. }   
  21. }  

注意,上述的代碼中直接由客戶端實現(xiàn)了回調(diào)契約,這是一種比較常見的實現(xiàn)方式。

客戶端通過回調(diào)傳遞給服務(wù)端的消息包含了WCF回調(diào)契約終結(jié)點的引用。在服務(wù)端,可以通過OperationContext類的泛型方法GetCallbackChannel<T>()獲得。如下所示:

  1. ISomeCallbackContract callback = OperationContext.Current. 
    GetCallbackChannel
    <ISomeCallbackContract>( ); 

【編輯推薦】

  1. WCF單向操作不同于異步操作
  2. WCF服務(wù)引用具體操作步驟圖解
  3. WCF行為擴展為程序開發(fā)提供極大便利
  4. WCF編碼器正確創(chuàng)建方式解讀
  5. WCF服務(wù)異步調(diào)用不同實現(xiàn)方式講解
責(zé)任編輯:曹凱 來源: IT168
相關(guān)推薦

2010-02-26 11:15:51

WCF接口方法

2010-02-24 14:41:16

WCF物理地址

2010-02-25 16:07:28

WCF REST

2010-02-23 14:03:53

WCF契約回調(diào)

2009-12-08 11:34:40

WCF Windows

2009-11-06 16:05:37

WCF回調(diào)契約

2010-02-24 15:27:26

Python數(shù)組

2010-01-18 17:07:52

C++類

2009-12-21 14:05:18

WCF契約

2009-12-30 17:35:21

Silverlight

2009-12-22 19:00:08

WCF回調(diào)

2009-11-09 09:23:10

WCF數(shù)據(jù)契約

2010-02-22 15:27:05

WCF數(shù)據(jù)契約

2010-02-22 13:56:35

WCF服務(wù)契約

2010-02-24 16:58:14

WCF Session

2024-05-21 09:08:57

JVM調(diào)優(yōu)面試

2012-03-26 10:55:03

JavaJava EE

2023-11-30 07:50:38

SaaS企業(yè)

2009-12-08 15:52:10

WCF回調(diào)

2009-11-09 15:58:07

WCF回調(diào)方法
點贊
收藏

51CTO技術(shù)棧公眾號