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

WCF編碼器正確創建方式解讀

開發 開發工具
WCF編碼器的創建,實現起來看似麻煩,但是實際操作起來還是比較簡單的。在這篇文章中,我們可以通過介紹來詳細掌握這一應用技巧。

在應用WCF之前,我們需要創建一個編碼器來幫組我們的程序開發。那么如何才能正確的實現WCF編碼器的創建呢?首先,我們需要創建一個定制的MessageEncoderFactory,它能創建我們的定制的編碼器對象,它需要:#t#

一個被覆蓋的編碼器對象

一個被覆蓋的消息版本

包含一個從CustomMessageEncoder工廠創建的名為CustomEncoderFactory的樣本類。我們需要將該編碼器標記為一個單獨的CustomMessageEncoder工廠對象。

為了創建一個CustomEncoderFactory實例,需要傳入兩個新的東西:一個EncodeMode枚舉值以及一個EnableCompression變量:

EncodeMode是一個可根據配置值動態改變編碼格式,并且無需知道任何特殊的WCF編碼器的深入知識就可以編寫壓縮/解壓縮邏輯的枚舉值。它支持各種壓縮類型,包括None、Deflate、Gzip,同時,我們還可以添加更多定制的壓縮編碼器格式:

  1. /// <  summary> 
  2. /// Compression Encoder formats. Add custom encoders such as   
  3. /// ICSharpLib, 7z, rar   
  4. /// <  /summary> 
  5. public enum CompressionEncoder  
  6. {  
  7. None,  
  8. Deflate,  
  9. GZip  

EnableCompression是一個布爾開關值,通過它可以啟用或者禁用壓縮處理。

接下來,我們需要創建一個CustomEncoder,以實現抽象類MessageEncoder,具體代碼如清單2所示。清單2的示例代碼實現了IsDataCompressed方法,用以確定數據是否已經壓縮。對于Gzip,可以使用“幻碼”值來確定數據是否經過壓縮處理。

就像前面提到的那樣,這個定制的WCF編碼器的編碼過程是在ReadMessage和WriteMessage方法中進行的。所以,我們還需要覆蓋ContentType屬性來交付不同的內容類型。枚舉類型的CompressionEncoder變量值決定了運行時的內容類型。

然后,我們需要創建一個CustomMessageEncodingBinding元素,以便規定可配置的定制屬性,在本例中它包含EnableCompression、CompressionEncoder 和捆綁元素。

***,我們需要創建一個CustomMessageEncodingElement元素,它派生自BindingElementExtensionElement類。
 

從配置文件讀取這些值之后,CreateBindingElement方法充當一個入口點,并將這些值轉換成定制的捆綁元素的適當的屬性。

我們需要注意的事項如下所示:CreateBindingElement方法,它充當一個入口點。

注意,我們可以通過配置修改捆綁元素的messageversion屬性,但是為簡單起見,我們在此不對此加以討論。

ApplyConfiguration方法,它使我們可以顯式指定屬性。

ReaderQuotas,它用來給CustomMesssageEncodingBindingElement指定屬性。

值ReaderQuotas.MaxArrayLength可以控制請求大小。因為這個例子使用定制的捆綁,所以需要將其設為捆綁元素。

***,需要實現CustomBindingElement的配置部分。對于客戶端,配置看上去是這樣的:

  1. < system.serviceModel> 
  2. < extensions> 
  3. < bindingElementExtensions> 
  4. < add name="customMessageEncoding" type="   
  5. Infrastructure.CustomEncoder.CustomMessageEncodingElement, assemblyname" /> 
  6. < /bindingElementExtensions> 
  7. < /extensions> 
  8. < bindings> 
  9. < customBinding> 
  10. < binding name="myBinding"> 
  11. < customMessageEncoding innerMessageEncoding=  
  12. "textMessageEncoding" enableCompression="false" 
  13. compressionEncode="gzip"> 
  14. < readerQuotas maxArrayLength="62914560" >< /readerQuotas> 
  15. < /customMessageEncoding > 
  16. < httpTransport maxBufferSize="62914560"   
  17. maxReceivedMessageSize="62914560" 
  18. authenticationScheme="Anonymous"   
  19. proxyAuthenticationScheme="Anonymous" 
  20. useDefaultWebProxy="true" 
  21. /> 
  22. < /binding> 
  23. < /customBinding>   
  24. < /bindings> 
  25. < client> 
  26. < endpoint address="http://127.0.0.1/mywcf.services/service1.svc" 
  27. binding="customBinding" bindingConfiguration="myBinding" 
  28. contract="IService" name="Service1"> 
  29. < /endpoint> 
  30. < /client> 
  31. < /system.serviceModel> 

上面創建的定制的捆綁使用新的CustomMessageEncoding。請求通常不需要壓縮,因為它們通常很小;事實上,壓縮它們反而會增加請求的尺寸。因此,以上顯示的客戶端配置文件了enableCompression ="false"的設置。服務器配置看起來象這樣:

  1. < system.serviceModel> 
  2. < extensions> 
  3. < bindingElementExtensions> 
  4. < add name="customMessageEncoding" type="   
  5. Infrastructure.CustomEncoder.CustomMessageEncodingElement, assemblyname" /> 
  6. < /bindingElementExtensions> 
  7. < /extensions> 
  8. < bindings> 
  9. < customBinding> 
  10. < binding name="myBinding"> 
  11. < customMessageEncoding   
  12. innerMessageEncoding="textMessageEncoding"   
  13. enableCompression="true" 
  14. compressionEncode="gzip"> 
  15. < readerQuotas   
  16. maxArrayLength="62914560" > 
  17. < /readerQuotas> 
  18. < /customMessageEncoding > 
  19. < httpTransport maxBufferSize="62914560"   
  20. maxReceivedMessageSize="62914560" 
  21. authenticationScheme="Anonymous"   
  22. proxyAuthenticationScheme="Anonymous" 
  23. useDefaultWebProxy="true" /> 
  24. < /binding> 
  25. < /customBinding>   
  26. < bindings> 
  27. < services> 
  28. < service behaviorConfiguration="Host.Behavior" 
  29. name="Host.Service"> 
  30. endpoint address=""   
  31. binding="customBinding"   
  32. bindingConfiguration="myBinding" 
  33. contract="ServiceContracts.IService" /> 
  34. < endpoint address="mex" binding="mexHttpBinding"   
  35. contract="IMetadataExchange" /> 
  36. < /service> 
  37. < /services> 
  38. < /system.serviceModel> 

通過閱讀本文,您會發現向我們的WCF編碼器中添加定制的編碼不僅簡單,而且還是透明的。我們的示例代碼不僅包含了文中描述的class屬性的詳盡的源代碼,而且還提供了所需的配置章節。

責任編輯:曹凱 來源: IT168
相關推薦

2010-02-26 13:26:55

WCF消息編碼器

2010-03-02 16:05:48

WCF端點配置

2010-02-26 17:44:51

WCF安全參數

2025-04-07 03:30:00

2010-03-01 10:26:40

WCF異步服務

2010-02-26 14:05:57

WCF通信方式

2009-12-08 14:10:55

Silverlight

2010-02-24 10:07:48

WCF跨越邊界

2010-03-02 09:32:54

WCF服務消息

2010-02-22 14:09:08

WCF Dispose

2010-03-01 16:59:31

WCF異常調試

2021-11-02 20:44:47

數字化

2021-03-29 11:37:50

人工智能深度學習

2021-03-22 10:52:13

人工智能深度學習自編碼器

2010-02-26 09:33:18

WCF創建WebSer

2025-04-10 06:30:00

2025-04-10 11:52:55

2012-04-10 16:55:22

PowerSmart編碼器

2012-04-01 16:40:45

編碼器

2010-02-26 15:24:27

WCF釋放服務對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人a网 | 亚洲国产高清高潮精品美女 | 国产成人一区二区三区 | 日韩二 | 黑人久久久 | 欧美日韩国产精品一区二区 | 男人天堂免费在线 | 精品中文在线 | 国产欧美精品区一区二区三区 | 依人成人 | 久久亚洲一区二区三区四区 | 国产成人综合在线 | 夜夜骑首页 | 成人欧美一区二区三区在线观看 | 久久久久久女 | 久久亚洲欧美日韩精品专区 | 欧美网址在线观看 | 亚洲一区在线播放 | 中文字幕在线一区 | 久久777| 精品久久国产老人久久综合 | 亚洲精品一区二区三区中文字幕 | 久久精品无码一区二区三区 | 五月槐花香 | 97avcc| 91一区二区三区 | 天天干夜夜 | 国产观看 | 热久久性| 欧美一区二区大片 | 欧美精品欧美精品系列 | 一区二区三区久久久 | 国产日韩一区 | 91免费电影 | 午夜免费视频 | 四虎永久在线精品免费一区二 | 一级片免费网站 | 国产一区二区欧美 | 国产在线1 | 中文字幕在线观看一区 | 国产精品亚洲一区二区三区在线 |