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

知識手冊之談WCF行為擴展

開發(fā) 后端
在WCF行為擴展是很常用的,對DispatchRuntime和DispatchOperation進行擴展,擴展點包括了對參數(shù)和消息的檢查,以及操作調用程序。

WCF行為擴展有很多值得學習的地方,大家可以上網(wǎng)收收資料了解一下,本人比較熱愛WCF這門技術,我先給大家總結點關于WCF行為擴展的知識。WCF以其靈活的可擴展架構為開發(fā)者提供了方便,其中WCF行為擴展或許是應用中最為常見的。自定義對行為的擴展并不復雜,但仍有許多細節(jié)需要注意。

#T#在服務端,一般是對DispatchRuntime和DispatchOperation進行擴展,擴展點包括了對參數(shù)和消息的檢查,以及操作調用程序,它們對應的接口分別為IParameterInspector,IDispatchMessageInspector以及 IOperationInvoker。而在客戶端,則是對ClientRuntime和ClientOperation進行擴展,擴展點包括對參數(shù)和消息的檢查,對應的接口分別為IParameterInspector和IClientMessageInspector。這些接口類型均被定義在 System.ServiceModel.Dispatcher命名空間下,其中IParameterInspector接口可以同時作用在服務端和客戶端。

對這些接口的實現(xiàn),有點類似于AOP的實現(xiàn),可以對方法調用前和調用后注入一些額外的邏輯,所以通常會將這些擴展稱為偵聽器。例如IParameterInspector接口,就定義了如下方法:

  1. void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState);  
  2. object BeforeCall(string operationName, object[] inputs); 

在調用服務對象的目標方法前,會調用BeforeCall方法,而在調用后則會調用AfterCall方法。例如我們可在方法調用前檢驗計算方法的參數(shù)是否小于0,如果小于0則拋出異常:

  1. public class CalculatorParameterInspector:IParameterInspector  
  2. {  
  3. public void BeforeCall(string operationName, object[] inputs)  
  4. {  
  5. int x = inputs[0] as int;  
  6. int y = inputs[1] as int;  
  7. if (x <0 || y < 0)  
  8. {  
  9. throw new FaultException("The number can not be less than zero.");  
  10. }  
  11. return null;  
  12. }  
  13. public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)  
  14. {  
  15. //empty;  
  16. }  

對消息的檢查區(qū)分了服務端和客戶端,接口方法根據(jù)消息傳遞的順序剛好相反[注]。我們可以通過接口方法對消息進行處理,例如打印消息的Header:

  1. public class PrintMessageInterceptor : IDispatchMessageInspector  
  2. {  
  3. #region IDispatchMessageInspector Members  
  4.  
  5. public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)  
  6. {  
  7. MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);  
  8. request = buffer.CreateMessage();  
  9.  
  10. Console.WriteLine("After Receive Request:");  
  11. foreach (MessageHeader header in request.Headers)  
  12. {  
  13. Console.WriteLine(header);  
  14. }  
  15. Console.WriteLine(new string('*', 20));  
  16. return null;  
  17. }  
  18.  
  19. public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)  
  20. {  
  21. MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);  
  22. reply = buffer.CreateMessage();  
  23.  
  24. Console.WriteLine("Before Send Request:");  
  25. foreach (MessageHeader header in reply.Headers)  
  26. {  
  27. Console.WriteLine(header);  
  28. }  
  29. Console.WriteLine(new string('*', 20));  
  30. }  
  31.  
  32. #endregion  
責任編輯:田樹 來源: 博客
相關推薦

2009-03-16 09:16:13

行為擴展WCF.NET

2010-02-26 10:46:12

WCF行為擴展

2009-11-09 17:06:38

WCF選擇綁定

2010-03-02 17:48:35

WCF尋址報頭

2010-03-01 14:41:14

WCF行為擴展

2009-11-05 15:50:25

WCF behavio

2009-12-21 10:44:32

2009-12-22 14:54:52

WCF安全

2009-12-22 11:14:38

WCF禁用安全配置

2010-03-02 09:24:22

WCF變更行為

2010-03-02 14:41:00

WCF行為控制

2010-02-25 09:36:28

WCF行為控制

2010-03-01 14:50:30

WCF行為類型

2009-11-06 14:25:56

WCF接口

2009-12-22 15:33:50

WCF傳輸安全

2009-12-22 14:16:01

WCF連接服務超時

2010-03-01 09:19:10

WCF編碼規(guī)范

2009-11-05 15:18:19

WCF擴展

2010-03-30 08:40:36

WCF

2010-02-25 17:22:39

WCF服務行為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情欧美激情在线五月 | 久久国产区 | 久久69精品久久久久久久电影好 | 日韩一级 | 亚洲免费视频网址 | 日韩欧美在线一区 | 日本久久网| 国产日韩欧美一区 | av黄色在线| 日韩在线国产 | 伊人在线 | 天天综合天天 | 亚洲成人在线免费 | 国产区高清 | 在线一区二区三区 | 国产传媒毛片精品视频第一次 | 亚洲国产精品一区二区第一页 | 蜜臀91视频 | 欧美中文字幕一区 | 国产精品99久久久久久久vr | 亚洲精品av在线 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 亚洲 日本 欧美 中文幕 | 日日干日日操 | 99久久久久久99国产精品免 | 一区二区免费在线 | 日韩在线视频播放 | 欧美性久久 | 精品一区二区久久久久久久网站 | 欧美激情精品久久久久久 | 在线播放国产一区二区三区 | 日韩精品一区二区三区在线播放 | 日韩久久精品 | 婷婷久久综合 | 一级看片免费视频囗交动图 | 亚洲精品久久久久久久不卡四虎 | 91成人午夜性a一级毛片 | 一区二区三区在线 | 日韩久久久久久 | 亚洲日本激情 | 欧美一级淫片免费视频黄 |