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