程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 《WCF技術內幕》20:第2部分_第5章_消息:Message類型介紹

《WCF技術內幕》20:第2部分_第5章_消息:Message類型介紹

編輯:關於.NET

第5章:消息

System.ServiceModel.Channels.Message抽象類型是Microsoft Windows Communication Foundation (WCF)裡通信的基本單位。盡管Message類型使用在 WCF 程序裡,但是WCF的開發人員卻不需要直接接觸Message。因此,可以不與任 何Message的實例交互就能寫出一個功能豐富的WCF程序。但是,雖然你的代碼沒 有直接與Message對象交互,記住WCF基礎結構也在背後忙於創建、發送、接受或 者其它處理Message對象的工作。

注意本章裡使用的詞語,當我使用Message的時候,指的的是 System.ServiceModel.Channels.Message 類型。當我使用message,指的是發送 和接收數據的抽象概念。(老徐翻譯本書的時候Message一律翻譯為:Message類 型,因為它是.NET的內建類型。 message一律翻譯為:消息。這裡不會混淆。)

如果WCF基礎結構已經為我們做了Message類型的處理工作,為什麼我們還要 花費這麼多時間和精力去搞明白Message類型呢?在我看來,有2個重要原因。首 先,許多WCF公共定制功能(像behaviors和encoders編碼器)需要直接與 Message 類型交互。如果你不知道Message類型,這會花費更多的時間,並且你 也許會給WCF基礎結構帶來非常嚴重的後果。其次,我發現,扎實地掌握 Message類型會有效提高你對WCF的整體理解能力。在某些層次上,WCF基礎結構 就是在產生、發送、接受或者處理Message對象,因此,理解 Message類型是理 解WCF內部工作機制的基礎。為了使你可以擴展WCF的知識並加強你對WCF的理解 ,這一章會解釋Message類型的核心功能,以及與Message對象交互的其它類型。

Message類型介紹

Message引用類型是WCF應用對SOAP消息的抽象。由於與SOAP消息如此緊密的 關系,Message類型定義了表示SOAP版本、信封、消息頭、消息頭塊和消息體元 素的成員。和其它以XML為中心的WCF類型一樣,Message類型構建於XML Infoset 之上。從作用上講,Message類型實際是對數據存儲的一個包裝,並且這個數據 存儲就是一個XML Infoset。

Image from book

Message類型和SOAP

Message類型和SOAP之間的關系這裡需要解釋一下。當Microsoft的架構師設 計WCF的時候,他們預料到XML和SOAP會成為所有消息應用的標准結構。而整個行 業也在往此方向發展。絕大部分,不是全部的話,現在的消息平台已經支持發送 和接收XML消息。許多平台把SOAP作為首要的消息結構。意識到這些問題,微軟 的架構師得出SOAP和XML是首選消息結構的結論,Message類型完全支持SOAP,並 且在對象模型裡封裝了SOAP語義。

Message類型的結構可以輕易滿足非SOAP類型的XML應用系統。Message類型能 夠簡單地去除SOAP消息結構而發送樸素舊的XML消息(Plain Old XML (POX) messages)。當Message類型必須適應一個非XML平台的應用系統的時候,還會有 問題產生。最顯著的一個例外就是JavaScript Object Notation(JSON)。和你 名字表達的意思一樣,JSON是JavaScript表示對象的一種方式,而且完全被支持 AJAX的技術兼容,像Microsoft ASP.NET AJAX。

考慮下面場景的例子:一個Web程序需要使用一個數組的值異步更新一個 drop-down list。假設這個數組的值是有頁面上的另外一個控件控制。使用 Microsoft ASP.NET和ASP.NET AJAX,我們可以很簡單地實現信息檢索和局部刷 新頁面內容。那麼假如你需要從WCF來獲取數據呢?這種情況下,應答消息需要 使用JSON格式的數組,而不是XML。對於這種類型的應用程序,浏覽器處理XML是 非常困難和復雜的。對象渲染為JSON,換句話說,非常容易通過JavaScript傳遞 drop-down list的值。

咋一看,JSON好像是應用在Message類型實例上的又一個編碼器,很像消息傳 輸優化機制(MTOM)。近距離觀察,你會發現幾個問題。對於初學者,JSON沒有 任何XML的namespaces 和屬性。我們虛構的JSON編碼器需要提取XML信息。確切 地說,JSON裡字符串的順序非常重要。在XML裡,schema定義了元素的順序。如 果 schema沒有要求XML消息的順序,可能轉換為等價的JSON對象就會非常的困難 。為了解決這個問題,WCF團隊將會發布幾個額外的類型幫助 Message類型的序 列化。

Image from book

在整個生命周期裡,在傳輸到其它消息 參與者之前,Message對象必須經過幾次轉換。從發送者角度來看,這個轉換包 含2個步驟:序列化和編碼。Message序列化是把Message 實例轉換為XML Infoset, 編碼是把XML Infoset轉換為特定的數據格式。從接受者角度來看, 這個轉換正好與發送者相反。換句話說,接受者必須反編碼接收到的數據位 Infoset,然後在反序列化Infoset為一個Message實例。

Message對象模 型更多的專注於Message的序列化和反序列化,它們中的絕大部分影響了WCF應用 程序編程接口(API)裡的其它類型。因此,在研究 Message類型前,有必要知 道序列化和編碼的類型。下一張我們會先看一下負責Message序列化和編碼的基 本類型。此後,我們將繼續詳細學習 Message類型。

【老徐備注】

1. JSON(JavaScript Object Notation) 是一種輕量 級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。它基於 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用 了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。JSON建構於兩種數據類 型:

(1)“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構 (struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。

(2)值的有序列表( An ordered list of values)。在大部分語言中,它被理解為數組(array)。

參考:http://json.org/json-zh.html

2. 讀音:[e:j^ks] 。 AJAX即“Asynchronous JavaScript and XML”(異步JavaScript和 XML),AJAX並非縮寫詞,而是由Jesse James Gaiiett創造的名詞,是指一種創 建交互式網頁應用的網頁開發技術。

【地 址】: http://www.cnblogs.com/frank_xl/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved