日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
WCF消息交換應(yīng)用方式技巧分享

WCF開發(fā)插件的出現(xiàn)為我們帶來(lái)了許多不一樣的體驗(yàn)。而且其在實(shí)際應(yīng)用中起到了非常重要的作用。在這里我們將會(huì)為大家詳細(xì)介紹一下其中一個(gè)比較重要的基礎(chǔ)知識(shí),WCF消息交換的應(yīng)用技巧。

10年積累的網(wǎng)站設(shè)計(jì)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有和平免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

客戶端和服務(wù)之間通過(guò)消息交換(Message Exchange)來(lái)完成方法調(diào)用和數(shù)據(jù)傳遞,WCF消息交換擁有三種定義方式。

WCF消息交換之1. Request/Reply

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

 
 
 
  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 

客戶端調(diào)用

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

運(yùn)行結(jié)果#t#

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

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

相差了四秒了。

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

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

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

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

我們來(lái)看一下運(yùn)行結(jié)果:

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

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

馬上就返回了結(jié)果

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

WCF消息交換之3. duplex

這種模式相對(duì)復(fù)雜一些,我們?cè)敿?xì)描述一下步驟:

(1).設(shè)計(jì)標(biāo)準(zhǔn)的服務(wù)契約。為了完成回調(diào)操作,我們必須指定SessionMode和回調(diào)類型

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

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

 
 
 
  1. Public Interface ICallback  
  2. < OperationContract()> _  
  3. Sub [Call](ByVal t As DateTime)  
  4. End Interface 

實(shí)現(xiàn)服務(wù)契約,通過(guò)OperationContext.Current.GetCallBackChannel可以獲取回調(diào)委托,進(jìn)而完成調(diào)用。

 
 
 
  1. Public Class Service1  
  2. Implements IService1  
  3. 'ICallback callback = OperationContext.Current.
    GetCallbackChannel< ICallback>();  
  4. Dim callback As ICallback = OperationContext.Current.
    GetCallbackChannel(Of ICallback)()  
  5. Public Sub Run(ByVal name As String) Implements IService1.Run  
  6. Threading.Thread.Sleep(1000) '停四秒  
  7. Me.callback.Call(Now)  
  8. Console.WriteLine("Run Time " & Now.ToString)  
  9. End Sub  
  10. End Class 

這時(shí)運(yùn)行時(shí),會(huì)出現(xiàn)以前異常:

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

需要更改服務(wù)器的配置文件:

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

客戶端實(shí)現(xiàn):

 
 
 
  1. Sub Main()  
  2. Dim s As New ServiceReference1.Service1Client(New 
    System.ServiceModel.InstanceContext(New ContractCallback))  
  3. Console.WriteLine("開始執(zhí)行時(shí)間: {0}", Now.ToString)  
  4. s.Run("aa")  
  5. Console.WriteLine("結(jié)束執(zhí)行時(shí)間:{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 

小結(jié):  

運(yùn)行沒(méi)有問(wèn)題,但是 Call 方法,并沒(méi)有進(jìn)行打印,也沒(méi)有刪除C盤下面的1.xml文件。百思不得其解,同時(shí)反現(xiàn)不知道怎么調(diào)試服務(wù)端。這次雖然按照網(wǎng)上博客實(shí)現(xiàn)了三種消息傳遞的方式,但是沒(méi)有理解其中的奧秘。

以上就是對(duì)WCF消息交換的具體介紹。


網(wǎng)頁(yè)標(biāo)題:WCF消息交換應(yīng)用方式技巧分享
網(wǎng)頁(yè)鏈接:http://m.5511xx.com/article/djiidjj.html