WCF 第六章 序列化与编码 编码选择
文本編碼與二進制編碼
在WCF之前,你有很多創建分布式應用程序的選擇。其中的兩個選擇是.NET Remoting和ASP.NET 網絡服務。.NET Remoting 很適合.NET 應用程序間的通信因為它使用二進制編碼傳輸數據。這比ASP.NET 網絡服務提供更好的性能,ASP.NET 網絡服務在交互中使用文本編碼。由于文本編碼允許跨平臺交互所以它在ASP.NET 網絡服務中是被廣泛接受的。WCF將編碼架構抽象出來并允許同時使用兩種編碼格式的綁定存在。這使得WCF可以同時取代.NET Remoting和ASP.NET 網絡服務。
? 對我們來說不會直接操作編碼。相反,它由用來暴露一個服務的綁定確定。第四章”綁定”高亮顯示了.NET應用程序間使用的綁定和那些用來交互的綁定。netTcpBinding綁定,在.NET應用程序間使用,它使用binaryMessageEncoding編碼器。binaryMessageEncoding編碼器提供了最佳的性能,但是它不支持交互。對應的,諸如wsHttpBinding綁定使用textMessageEncoding編碼器,這個編碼器使用WS-* 協議提供交互能力。列表6.34顯示了一個使用textMessageEncoding編碼器的自定義綁定。
列表6.34 使用textMessageEncoding的自定義綁定
<?xml version="1.0" encoding="utf-8" ?>? 列表6.35 顯示了一個使用binaryMessageEncoding編碼器的自定義綁定配置
列表6.35 使用binaryMessageEncoding的自定義綁定
<?xml version="1.0" encoding="utf-8" ?>使用MTOM編碼器發送二進制數據
textMessageEncoding編碼器將消息轉換成基于文本的XML。這對交互是很好的,但是在傳輸大塊二進制數據時非常低效。MTOM用來在交互場景中將大量二進制數據作為原始字節發送。正如先前所提到的那樣,MTOM全稱是消息傳輸最佳架構。這是將二進制數據作為SOAP消息的消息體來優化二進制數據發送的標準。這意味著二進制數據可以使用一個SOAP消息傳輸而不用加上BASE64的文本編碼。為了從MTOM的使用中受益,一個服務必須包含一個類型數組或者操作契約中的一個流對象。
? WCF通過mtomMessageEncoding編碼器提供對MTOM的支持。對mtomMessageEncoding編碼器的使用一般通過綁定確認。列表6.36 顯示了如何使用wsHttpBinding綁定確認MTOM編碼器。
列表6.36 使用mtomMessageEncoding的wsHttpBinding
開始了解WebMessageEncoder
WebMessageEncoder在.NET Framework 3.5時加入到WCF中的,它提供對JSON和POX編碼的支持。這個編碼器不提供一個特殊類型編碼,但是集合了一系列的在當前網絡上使用的編碼類型。WebMessageEncoder編碼器通過使用WebHttpBehavior或者WebScriptEnablingBehavior終結點行為開啟。
? WebHttpBehavior終結點行為指導WebMessageEncoder編碼器使用TextMessageEncoder編碼器。這在內部通過TextMessageEncoder編碼器并設置消息版本為MessageVersion.Node來實現的。這指導TextMessageEncoder編碼器在XML中不包含任何SOAP或者WS-Addressing信息。WebMessageEncoder編碼器支持在XML或者JSON中的請求和回復消息。WebHttpBehavior終結點行為的默認行為時講請求和回復消息格式設置成WebMessageFormat.Xml.這可以通過在代碼中通過設置請求和/或回復消息格式并在WebMessageFormat.Xml或者WebMessageFormat.Json上設置[WebGet]屬性實現。
? 盡管請求和回復格式可以獨立確定,它們一般設置成同樣的值。WebScriptEnablingBehavior終結點行為通過將默認請求和回復格式設置成WebMessageFormat.Json來實現的。這也指導WebMessageEncoder編碼器使用JsonMessageEncoder編碼器來對消息編碼。WebScriptEnablingBehavior用于從JavaScript調用服務的AJAX使能的網絡應用。也開啟對ASP.NET AJAX 客戶端代理的支持。
? 參考第十三章來獲取更多關于WebHttpBehavior行為,WebScriptEnablingBehavior行為和[WebGet]屬性的信息。
轉載于:https://www.cnblogs.com/danielWise/archive/2010/12/22/1914095.html
總結
以上是生活随笔為你收集整理的WCF 第六章 序列化与编码 编码选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 判断请求为 ajax请求_Ja
- 下一篇: php中oop类,phpOOP类的用法_