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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
知識手冊之談WCF行為擴展

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

成都創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)絡(luò)空間、主機租用、主機托管,四川、重慶、廣東電信服務(wù)器租用,德陽機房托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。

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

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

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

在調(diào)用服務(wù)對象的目標(biāo)方法前,會調(diào)用BeforeCall方法,而在調(diào)用后則會調(diào)用AfterCall方法。例如我們可在方法調(diào)用前檢驗計算方法的參數(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. }
  17. }

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

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

當(dāng)前文章:知識手冊之談WCF行為擴展
本文來源:http://m.5511xx.com/article/dhoggdp.html