圖文演示WCF序列化流程
經過長時間積累WCF方面的知識,對它也有一定的認識,在這里分享給大家,看完本文你肯定有不少收獲,希望本文能教會你更多東西。知道數據契約的一些概念和特性之后,下面來介紹一下WCF序列化的概念。為什么WCF序列化:我們這里先來介紹一下為什么需要序列化。當然這個不是必須的。只是針對特定的開發平臺的數據或者信息類型而言,當一個系統或者說平臺需要和別的異構的系統或者平臺交互的時候,兩個系統需要一個特定的公開的可以公用的行業標準來支持這個數據信息的交互。這里目前來說支持這個數據交互傳遞的語言載體就是XML.
#T#同樣WCF作為面向服務的編程框架,它的目標或者特性之一就是實現服務的跨語言、平臺,與不同的服務進行信息數據的交互,而不限制客戶端的系統或者開發語言。要實現這個目標,WCF服務首先就是要面對信息的傳遞與共享問題。我們知道WCF服務和客戶端可以傳遞如Int、String等.NET數據類型。但是如何實現用戶自定義復雜類型的跨服務邊界的傳遞,這是一個關鍵問題。數據契約可以發布為服務的元數據,允許客戶端轉化為本地語言表示。解決的辦法就是封送(Marshaling),將對象封送到其它平臺。基于WCF的客戶端和服務端參數傳遞的過程如下圖:
WCF序列化
主要步驟:客戶端序列化參數為XML信息集--傳遞->服務端反序列化為本地類型--執行結果->序列化結果為XML信息集--傳遞->客戶端序反序列化返回信息為本地類型。
在WCF分布式開發必備知識(2):.Net Remoting一節中也介紹了.Net Remoting的通信過程 ,兩者也有流程也有部分相似之處。對象封送的概念其實.Net Remoting早有涉及,遠程對象(RemoteOject),也就是我們遠程要訪問的對象.首先定義一個Class,繼承MarshalByRefObject,可以使用在remoting應用中,支持對象的跨域邊界訪問。看過.Net Remoting這節文章應該還有點印象,不同之處是WCF的對象封送是為跨越服務邊界,.Net Remoting的封送是為了跨越跨域邊界。相關的概念請查閱WCF分布式開發必備知識(2):.Net Remoting或者MSDN,都能找到詳細的介紹,這里不在詳述。