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