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

WCF異步調(diào)用正確實(shí)現(xiàn)方法講解

開發(fā) 開發(fā)工具
WCF異步調(diào)用議案都是基于消息交換來進(jìn)行實(shí)現(xiàn)的。我們?cè)谶@篇我文章中將會(huì)通過這一操作方法進(jìn)行詳細(xì)的介紹方便大家了解。

WCF編程工具是.NET Framework 3.5的重要組成部分,它獨(dú)特的統(tǒng)一性,安全性以及兼容性可以幫助開發(fā)人員創(chuàng)造一個(gè)功能強(qiáng)大的企業(yè)級(jí)應(yīng)用解決方案。其中,WCF異步調(diào)用是基于消息交換(Message Exchange)來實(shí)現(xiàn)的,和我們通常使用委托來實(shí)現(xiàn)異步調(diào)用有所不同。

WCF異步調(diào)用步驟1. 創(chuàng)建服務(wù)契約。

  1. [ServiceContract(SessionModeSessionMode=SessionMode.Required)]  
  2. public interface ICalculate  
  3. {  
  4. [OperationContract]  
  5. int Add(int a, int b);  

WCF異步調(diào)用步驟2. 為契約方法添加異步版本。

我們?yōu)?Add 方法添加了 BeginAdd 和 EndAdd 兩個(gè)在 .NET SDK 中 "常見" 的異步操作方法。注意 BeginAdd 方法中我們添加了異步聲明,而 EndAdd 方法沒有。還有就是要注意異步版本方法的參數(shù)。

  1. [ServiceContract(SessionModeSessionMode=SessionMode.Required)]  
  2. public interface ICalculate  
  3. {  
  4. [OperationContract]  
  5. int Add(int a, int b);  
  6. [OperationContract(AsyncPattern=true)]  
  7. IAsyncResult BeginAdd(int a, int b, AsyncCallback callBack, 
    object state);  
  8. int EndAdd(IAsyncResult ar);  

WCF異步調(diào)用步驟3. 實(shí)現(xiàn)服務(wù)契約。

你可能注意到了,我們并沒有創(chuàng)建 Add 的委托原型,也沒有 "真正" 實(shí)現(xiàn) BeginAdd 和 EndAdd。這是因?yàn)橄⒔粨Q會(huì) "異步" 調(diào)用 Add 方法,所有的異步版本方法只是用來創(chuàng)建消息聲明而已。

  1. public class CalculateService : ICalculate  
  2. {  
  3. public int Add(int a, int b)  
  4. {  
  5. Thread.Sleep(5000);  
  6. Console.WriteLine(OperationContext.Current.SessionId);  
  7. return a + b;  
  8. }  
  9. public IAsyncResult BeginAdd(int a, int b, AsyncCallback 
    callBack, object state)  
  10. {  
  11. throw new Exception("The method or operation is not implemented.");  
  12. }  
  13. public int EndAdd(IAsyncResult ar)  
  14. {  
  15. throw new Exception("The method or operation is not implemented.");  
  16. }  

WCF異步調(diào)用步驟4. 我們給一個(gè)完整版本,看看執(zhí)行結(jié)果。

  1. [ServiceContract]  
  2. public interface ICalculate  
  3. {  
  4. [OperationContract]  
  5. int Add(int a, int b);  
  6. [OperationContract(AsyncPattern = true)]  
  7. IAsyncResult BeginAdd(int a, int b, AsyncCallback callBack, 
    object state);  
  8. int EndAdd(IAsyncResult ar);  
  9. }  
  10. public class CalculateService : ICalculate  
  11. {  
  12. public int Add(int a, int b)  
  13. {  
  14. Console.WriteLine("服務(wù)器方法 Add 開始執(zhí)行: {0}", DateTime.Now);  
  15. try  
  16. {  
  17. Thread.Sleep(5000);  
  18. return a + b;  
  19. }  
  20. finally  
  21. {  
  22. Console.WriteLine("服務(wù)器方法 Add 執(zhí)行完成: {0}", DateTime.Now);  
  23. }  
  24. }  
  25. public IAsyncResult BeginAdd(int a, int b, AsyncCallback 
    callBack, object state)  
  26. {  
  27. throw new Exception("The method or operation is not implemented.");  
  28. }  
  29. public int EndAdd(IAsyncResult ar)  
  30. {  
  31. throw new Exception("The method or operation is not implemented.");  
  32. }  
  33. }  
  34. public class WcfTest  
  35. {  
  36. public static void Test()  
  37. {  
  38. AppDomain.CreateDomain("Server").DoCallBack(delegate  
  39. {  
  40. ServiceHost host = new ServiceHost(typeof(CalculateService));  
  41. host.AddServiceEndpoint(typeof(ICalculate), new WSHttpBinding(),  
  42. "http://localhost:8080/calc");  
  43. host.Open();  
  44. });  
  45. ICalculate channel = ChannelFactory<ICalculate>.CreateChannel
    (new WSHttpBinding(),  
  46. new EndpointAddress("http://localhost:8080/calc"));  
  47. using (channel as IDisposable)  
  48. {  
  49. Console.WriteLine("客戶端調(diào)用 BeginAdd: {0}", DateTime.Now);  
  50. IAsyncResult ar = channel.BeginAdd(1, 2, delegate 
    { Console.WriteLine("CallBack..."); }, null);  
  51. Console.WriteLine("客戶端調(diào)用 BeginAdd 完成: {0}", DateTime.Now);  
  52. Console.WriteLine(channel.EndAdd(ar));  
  53. Console.WriteLine("客戶端調(diào)用 EndAdd 完成: {0}", DateTime.Now);  
  54. }  
  55. }  

輸出:

  1. 客戶端調(diào)用 BeginAdd: 2007-4-1 20:56:47  
  2. 客戶端調(diào)用 BeginAdd 完成: 2007-4-1 20:56:47  
  3. 服務(wù)器方法 Add 開始執(zhí)行: 2007-4-1 20:56:49  
  4. 服務(wù)器方法 Add 執(zhí)行完成: 2007-4-1 20:56:54  
  5. 3  
  6. 客戶端調(diào)用 EndAdd 完成: 2007-4-1 20:56:55  
  7. CallBack... 

最后在WCF異步調(diào)用步驟中需要注意的是,我們必須使用支持 Session 的 Binding 對(duì)象 (BasicHttpBinding 會(huì)拋出異常)。

【編輯推薦】

  1. WCF集合類型各種限制于規(guī)則介紹
  2. WCF集合反序列化具體操作技巧分享
  3. WCF集合數(shù)據(jù)契約相關(guān)定制方法詳解
  4. WCF宿主環(huán)境基本概念詳解
  5. WCF序列化引擎具體應(yīng)用技巧分享
責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-24 13:48:44

MSMQ使用WCF

2010-03-01 14:01:50

WCF服務(wù)異步調(diào)用

2009-11-06 15:54:15

WCF異步調(diào)用

2010-02-26 11:22:16

LitwareHR使用

2009-12-07 14:26:47

WCF異步調(diào)用

2024-08-12 10:13:01

2009-12-21 14:10:26

WCF異步調(diào)用

2009-11-09 10:50:30

WCF異步調(diào)用

2010-02-25 13:48:23

WCF動(dòng)態(tài)創(chuàng)建代碼

2010-02-25 16:52:12

引用WCF服務(wù)

2010-02-26 10:30:03

ASP.NET Aja

2010-02-25 10:10:29

WCF使用Header

2010-02-24 10:07:48

WCF跨越邊界

2010-02-26 08:59:10

WCF服務(wù)宿主程序

2010-02-24 10:41:28

WCF服務(wù)保護(hù)

2010-02-22 13:28:05

WCF異步調(diào)用

2009-12-07 14:35:42

WCF異步調(diào)用

2010-03-05 16:51:01

Python程序轉(zhuǎn)為E

2009-12-22 18:43:00

WCF異步調(diào)用

2009-11-09 15:49:01

WCF異步調(diào)用
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲444kkkk在线观看最新 | 成人在线中文字幕 | 综合另类| 欧美日韩在线免费 | 精品免费 | 在线中文字幕第一页 | 亚洲网站在线观看 | 蜜桃视频一区二区三区 | 福利视频二区 | 毛片视频网站 | 日本不卡一区 | 午夜在线观看免费 | 久久久国产一区 | 国产综合视频 | 涩涩视频在线观看 | 亚洲精品一区二区三区 | 99亚洲精品 | 亚洲福利网 | 午夜影院在线观看 | 亚洲一区二区三区桃乃木香奈 | 精品久久精品 | 亚洲乱码国产乱码精品精98午夜 | 欧美区在线 | 国产成人av在线 | 农村真人裸体丰满少妇毛片 | 国产激情网站 | 国产精品激情 | 国产精品永久在线观看 | 欧美国产日韩在线 | 精品国产一区二区在线 | 久久精品视频在线观看 | 嫩草一区二区三区 | 亚洲精品一区二区二区 | 精品二区 | 中文字幕在线一区二区三区 | 一级毛片中国 | 亚洲精品一区二区 | 蜜桃精品噜噜噜成人av | 久久久久久亚洲精品 | 在线观看中文字幕一区二区 | 久久久婷婷 |