自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF編碼器正確創(chuàng)建方式解讀

開(kāi)發(fā) 開(kāi)發(fā)工具
WCF編碼器的創(chuàng)建,實(shí)現(xiàn)起來(lái)看似麻煩,但是實(shí)際操作起來(lái)還是比較簡(jiǎn)單的。在這篇文章中,我們可以通過(guò)介紹來(lái)詳細(xì)掌握這一應(yīng)用技巧。

在應(yīng)用WCF之前,我們需要?jiǎng)?chuàng)建一個(gè)編碼器來(lái)幫組我們的程序開(kāi)發(fā)。那么如何才能正確的實(shí)現(xiàn)WCF編碼器的創(chuàng)建呢?首先,我們需要?jiǎng)?chuàng)建一個(gè)定制的MessageEncoderFactory,它能創(chuàng)建我們的定制的編碼器對(duì)象,它需要:#t#

一個(gè)被覆蓋的編碼器對(duì)象

一個(gè)被覆蓋的消息版本

包含一個(gè)從CustomMessageEncoder工廠創(chuàng)建的名為CustomEncoderFactory的樣本類(lèi)。我們需要將該編碼器標(biāo)記為一個(gè)單獨(dú)的CustomMessageEncoder工廠對(duì)象。

為了創(chuàng)建一個(gè)CustomEncoderFactory實(shí)例,需要傳入兩個(gè)新的東西:一個(gè)EncodeMode枚舉值以及一個(gè)EnableCompression變量:

EncodeMode是一個(gè)可根據(jù)配置值動(dòng)態(tài)改變編碼格式,并且無(wú)需知道任何特殊的WCF編碼器的深入知識(shí)就可以編寫(xiě)壓縮/解壓縮邏輯的枚舉值。它支持各種壓縮類(lèi)型,包括None、Deflate、Gzip,同時(shí),我們還可以添加更多定制的壓縮編碼器格式:

  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是一個(gè)布爾開(kāi)關(guān)值,通過(guò)它可以啟用或者禁用壓縮處理。

接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)CustomEncoder,以實(shí)現(xiàn)抽象類(lèi)MessageEncoder,具體代碼如清單2所示。清單2的示例代碼實(shí)現(xiàn)了IsDataCompressed方法,用以確定數(shù)據(jù)是否已經(jīng)壓縮。對(duì)于Gzip,可以使用“幻碼”值來(lái)確定數(shù)據(jù)是否經(jīng)過(guò)壓縮處理。

就像前面提到的那樣,這個(gè)定制的WCF編碼器的編碼過(guò)程是在ReadMessage和WriteMessage方法中進(jìn)行的。所以,我們還需要覆蓋ContentType屬性來(lái)交付不同的內(nèi)容類(lèi)型。枚舉類(lèi)型的CompressionEncoder變量值決定了運(yùn)行時(shí)的內(nèi)容類(lèi)型。

然后,我們需要?jiǎng)?chuàng)建一個(gè)CustomMessageEncodingBinding元素,以便規(guī)定可配置的定制屬性,在本例中它包含EnableCompression、CompressionEncoder 和捆綁元素。

***,我們需要?jiǎng)?chuàng)建一個(gè)CustomMessageEncodingElement元素,它派生自BindingElementExtensionElement類(lèi)。
 

從配置文件讀取這些值之后,CreateBindingElement方法充當(dāng)一個(gè)入口點(diǎn),并將這些值轉(zhuǎn)換成定制的捆綁元素的適當(dāng)?shù)膶傩浴?/p>

我們需要注意的事項(xiàng)如下所示:CreateBindingElement方法,它充當(dāng)一個(gè)入口點(diǎn)。

注意,我們可以通過(guò)配置修改捆綁元素的messageversion屬性,但是為簡(jiǎn)單起見(jiàn),我們?cè)诖瞬粚?duì)此加以討論。

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

ReaderQuotas,它用來(lái)給CustomMesssageEncodingBindingElement指定屬性。

值ReaderQuotas.MaxArrayLength可以控制請(qǐng)求大小。因?yàn)檫@個(gè)例子使用定制的捆綁,所以需要將其設(shè)為捆綁元素。

***,需要實(shí)現(xiàn)CustomBindingElement的配置部分。對(duì)于客戶(hù)端,配置看上去是這樣的:

  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> 

上面創(chuàng)建的定制的捆綁使用新的CustomMessageEncoding。請(qǐng)求通常不需要壓縮,因?yàn)樗鼈兺ǔ:苄?事實(shí)上,壓縮它們反而會(huì)增加請(qǐng)求的尺寸。因此,以上顯示的客戶(hù)端配置文件了enableCompression ="false"的設(shè)置。服務(wù)器配置看起來(lái)象這樣:

  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> 

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

責(zé)任編輯:曹凱 來(lái)源: IT168
相關(guān)推薦

2010-02-26 13:26:55

WCF消息編碼器

2010-02-26 17:44:51

WCF安全參數(shù)

2010-03-02 16:05:48

WCF端點(diǎn)配置

2025-04-07 03:30:00

2010-03-01 10:26:40

WCF異步服務(wù)

2010-02-26 14:05:57

WCF通信方式

2009-12-08 14:10:55

Silverlight

2021-03-29 11:37:50

人工智能深度學(xué)習(xí)

2021-11-02 20:44:47

數(shù)字化

2021-03-22 10:52:13

人工智能深度學(xué)習(xí)自編碼器

2010-02-22 14:09:08

WCF Dispose

2010-03-01 16:59:31

WCF異常調(diào)試

2010-02-24 10:07:48

WCF跨越邊界

2010-03-02 09:32:54

WCF服務(wù)消息

2025-04-10 06:30:00

2025-04-10 11:52:55

2012-04-10 16:55:22

PowerSmart編碼器

2010-02-26 09:33:18

WCF創(chuàng)建WebSer

2012-04-01 16:40:45

編碼器

2023-04-25 21:36:07

火山引擎
點(diǎn)贊
收藏

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