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

三種WCF消息交換常見模式解讀

開發(fā) 開發(fā)工具
WCF消息交換分為三種模式,分別為:Request/Reply;one-way模式和duplex。我們在這篇文章中將會重點介紹這三種消息交換模式。

WCF剛剛開始學的時候會覺得比較難以掌握,其實我們可以通過在實踐中慢慢去體會那些難以掌握的知識點。當我們在實際使用中,會發(fā)現(xiàn)WCF消息交換總共有三種模式。#t#

 

WCF消息交換1. Request/Reply

這是缺省模式,又稱為同步調用。在調用服務方法后需要要等待服務消息的返回。

 

 

  1. Public Class Service1  
  2. Implements IService1  
  3. Public Sub Run() Implements 
    IService1.Run  
  4. Threading.Thread.Sleep(4000) '停四秒  
  5. End Sub  
  6. End Class 

 

 

客戶端調用

 

 

  1. Dim s As New ServiceReference1
    .Service1Client  
  2. s.Open()  
  3. Console.WriteLine("開始執(zhí)行時間: 
    {0}", Now.ToString)  
  4. s.Run()  
  5. Console.WriteLine("結束執(zhí)行時間:
    {0}", Now.ToString)  
  6. s.Close()  
  7. Console.ReadKey() 

 

運行結果

 

開始執(zhí)行時間: 2009-11-06 16:53:51

結束執(zhí)行時間:2009-11-06 16:53:55

相差了四秒了。

WCF消息交換2.one-way模式

這種方式在調用方法后會立即返回,非常類似于異步行為。不過需要注意的是one-way只能用在過程方法是,而不用于函數(shù)。

接口定義如下,實現(xiàn)不用更改

 

 

  1. < ServiceContract()> _  
  2. Public Interface IService1  
  3. < OperationContract
    (isoneway:=True)> _  
  4. Sub Run()  
  5. End Interface 

 

我們來看一下運行結果:

 

開始執(zhí)行時間: 2009-11-06 16:58:28

結束執(zhí)行時間:2009-11-06 16:58:28

馬上就返回了結果

注意使用此模式,不得聲明輸出參數(shù)、引用參數(shù)或返回值。

WCF消息交換3. duplex

這種模式相對復雜一些,我們詳細描述一下步驟:

(1).設計標準的服務契約。為了完成回調操作,我們必須指定SessionMode和回調類型

 

 

  1. < ServiceContract(SessionMode
    SessionMode:=SessionMode.Required, 
    callbackcontract:=GetType(ICallback))> _  
  2. Public Interface IService1  
  3. < OperationContract(isoneway:=True)> _  
  4. Sub Run(ByVal name As String)  
  5. End Interface 

 

設置回調接口類型。由于回調方法在客戶端執(zhí)行,因此無須加ServiceContractAttribute屬性。對于回調操作,服務器無須獲取返回消息,因此添加isOneWay:=True特性參數(shù)。

  1. Public Interface ICallback  
  2. < OperationContract()> _  
  3. Sub [Call](ByVal t As DateTime)  
  4. End Interface  
  5. 實現(xiàn)服務契約,通過OperationContext
    .Current.GetCallBackChannel
    可以獲取回調委托,進而完成調用。  
  6. Code  
  7. Public Class Service1  
  8. Implements IService1  
  9. 'ICallback callback = OperationContext
    .Current.GetCallbackChannel< ICallback>();  
  10. Dim callback As ICallback = 
    OperationContext.Current.
    GetCallbackChannel(Of ICallback)()  
  11. Public Sub Run(ByVal name As 
    String) Implements IService1.Run  
  12. Threading.Thread.Sleep(1000) '停四秒  
  13. Me.callback.Call(Now)  
  14. Console.WriteLine("Run Time 
    " & Now.ToString)  
  15. End Sub  
  16. End Class 

這時運行時,會出現(xiàn)以前異常:

System.InvalidOperationException: 協(xié)定需要雙工,但是綁定“WSHttpBinding”不支持它或者因配置不正確而無法支持它。

需要更改服務器的配置文件:

< endpoint address ="" binding="wsHttpBinding" contract="異步.IService1">中的wsHttpBinding改為wsDualHttpBinding,客戶端重新更新服務器引用即可

客戶端實現(xiàn):

  1. Sub Main()  
  2. Dim s As New ServiceReference1
    .Service1Client(New System.
    ServiceModel.InstanceContext
    (New ContractCallback))  
  3. Console.WriteLine("開始執(zhí)行時間: 
    {0}", Now.ToString)  
  4. s.Run("aa")  
  5. Console.WriteLine("結束執(zhí)行時間:
    {0}", Now.ToString)  
  6. Console.ReadKey()  
  7. End Sub  
  8. Public Class ContractCallback  
  9. Implements ServiceReference1.
    IService1Callback  
  10. Public Sub [Call](ByVal t As Date) 
    Implements ServiceReference1
    .IService1Callback.Call  
  11. IO.File.Delete("c:\1.xml")  
  12. Console.WriteLine("Call AppDomain:" 
    & AppDomain.CurrentDomain.FriendlyName)  
  13. Console.WriteLine("Server DateTime:" 
    & t.ToString)  
  14. End Sub  
  15. End Class 

小結:  

運行沒有問題,但是 Call 方法,并沒有進行打印,也沒有刪除C盤下面的1.xml文件。百思不得其解,同時反現(xiàn)不知道怎么調試服務端。這次雖然按照網上博客實現(xiàn)了三種WCF消息交換的方式,但是沒有理解其中的奧秘。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-11-06 13:23:27

WCF模式

2010-08-03 10:59:29

云計算三種服務模式

2010-03-01 15:21:57

WCF死鎖

2010-01-18 14:20:15

交換機接口類型

2011-11-28 13:03:29

網絡熱備網絡設備熱備設備熱備

2009-11-06 10:54:19

WCF服務方式

2017-12-29 08:26:28

存儲引擎MySQL

2009-08-04 09:09:56

Java常見異常

2009-11-10 13:19:09

動態(tài)路由協(xié)議

2021-08-10 10:14:14

存儲接口存儲設備存儲

2015-09-14 09:31:44

結對設計

2015-10-13 15:05:09

BYOD自帶設備移動辦公

2015-09-25 11:08:44

移動辦公BYOD

2010-01-06 15:46:30

華為交換機vlan

2011-06-17 10:30:36

2010-02-03 15:46:15

C++函數(shù)傳遞

2009-12-22 13:34:07

WCF性能計數(shù)器級別

2010-09-25 15:07:08

SQL插入語句

2010-08-24 09:43:33

2022-05-27 11:33:02

前端代碼設計模式
點贊
收藏

51CTO技術棧公眾號