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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
WCF回調(diào)操作是雞應(yīng)用技巧講解

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

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的湯原網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

WCF回調(diào)的必要條件:

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

定義回調(diào)契約

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

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

客戶端WCF回調(diào)操作設(shè)置

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

下面通過代碼實例說明:

服務(wù)端代碼:

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

實現(xiàn)服務(wù)的類:

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

客戶端代碼:

 
 
 
  1. //客戶端實現(xiàn)回調(diào)接口,使用VS自動生成代理的時候,對于回調(diào)接口的命名默認是
    以服務(wù)契約接口名稱+Callback,而不是原先在服務(wù)端定義的回調(diào)接口的名子  
  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. }  

客戶端調(diào)用

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

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

本文題目:WCF回調(diào)操作是雞應(yīng)用技巧講解
鏈接分享:http://m.5511xx.com/article/dhhdsdg.html