色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

[原創(chuàng)]談?wù)刉CF中的Data Contract (1):Data Contract Overview

 Contract in SOContract是對(duì)操作和數(shù)據(jù)的抽象 

  在我們看來(lái),Service Orientation提供了一種對(duì)業(yè)務(wù)、功能進(jìn)行分解的方式。針對(duì)SO,我們把一個(gè)具體的業(yè)務(wù)流程或者一個(gè)復(fù)雜的功能分解成一個(gè)個(gè)獨(dú)立完成某項(xiàng)任務(wù)的子單元,這些子單元通過(guò)一個(gè)個(gè)Service來(lái)承載。對(duì)于Service本身來(lái)講,他們應(yīng)該是自治的,獨(dú)自完成自己的功能、不依賴于其他的Service。但是Service的價(jià)值體現(xiàn)在它被潛在的消費(fèi)者使用的程度。這實(shí)際上包含兩方面的內(nèi)容,作為Service本身,它如何將自己暴露出來(lái),供一切可能的潛在用戶調(diào)用,這些潛在用戶不僅僅指那些不同的Client,也包含其他的ServiceService Orientation其中一個(gè)特征就是“Service should be composite,鼓勵(lì)將一個(gè)個(gè)相關(guān)細(xì)粒度的Service組合成一個(gè)大的Service。這樣有利于較大限度的實(shí)現(xiàn)重用,而重用往往意味著更小的投入、更佳的可維護(hù)性。而另一方面就是這些消費(fèi)者通過(guò)怎樣的方式來(lái)調(diào)用它所需要的Service

  這實(shí)際上體現(xiàn)了兩者相互交互的問(wèn)題。在一個(gè)分布式的環(huán)境中要實(shí)現(xiàn)兩者的交互,有兩個(gè)必須要解決的問(wèn)題:如何保證Service的使用者對(duì)Service的調(diào)用能夠被Service端理解,以及對(duì)Service的調(diào)用如何抵達(dá)Service Side。后者實(shí)質(zhì)上是關(guān)于communication的問(wèn)題,我們現(xiàn)在不去談它。第一個(gè)問(wèn)題就是Contract需要解決的問(wèn)題。

  我們知道SOA一個(gè)主要的目標(biāo)就是促進(jìn)不同技術(shù)平臺(tái)的互操作,要真正實(shí)現(xiàn)這樣一個(gè)宏偉的目標(biāo)是一件極不容易的事情,需要不同的廠商和標(biāo)準(zhǔn)組織相互協(xié)作,制定一個(gè)大家一致遵循的標(biāo)準(zhǔn)。這樣一個(gè)標(biāo)準(zhǔn)就是WS-* 。我們很清楚,無(wú)論個(gè)個(gè)廠商各自的標(biāo)準(zhǔn)怎樣千差萬(wàn)別,但是有個(gè)標(biāo)準(zhǔn)是他們必須要遵循的,那就是InterNET的標(biāo)準(zhǔn),如果哪家公司拒絕InterNET,那肯定要被淘汰的。而對(duì)于InterNET,基于Http網(wǎng)絡(luò)協(xié)議和基于XML的數(shù)據(jù)表達(dá)已經(jīng)成為了事實(shí)上的標(biāo)準(zhǔn)。對(duì)于SOA來(lái)說(shuō),XML不僅僅用于表示Service調(diào)用攜帶的數(shù)據(jù)(參數(shù)和返回值),更用于表示這個(gè)調(diào)用本身,以及滿足各種要求的控制信息, 比如基于SecuritySessionReliable MessagingTransaction等等的控制信息。WS-*就是一個(gè)基于XML的標(biāo)準(zhǔn)。而對(duì)于SOA中的Contract所要做的就是尋求一種廠商中立的方式來(lái)表示Service的接口、和用于交互的數(shù)據(jù)結(jié)構(gòu)。前者就是Service Contract、后者就是Data Contract

  SOA中的一個(gè)Service由一組相關(guān)的Operation來(lái)構(gòu)成。Service Contract用于表示構(gòu)成該Service所有OperationInterface(而不是Implementation)。說(shuō)得更加具體點(diǎn),大家都知道ConsumerService之間的交互都是通過(guò)Message的形式來(lái)實(shí)現(xiàn)的,一次交互就是一次Message Exchange。在不同的場(chǎng)景,我們以不通過(guò)Pattern來(lái)進(jìn)程Message Exchange,比如我們通常使用Request-Response的方式來(lái)向Service發(fā)送Request進(jìn)而得到返回結(jié)果,我們也可以以Request-Forget的形式來(lái)異步地調(diào)用Service(不需要從Service獲取Response),我們可以讓一個(gè)Service在沒(méi)有收到任何Request的情況下,以廣播的形式向注冊(cè)的Client發(fā)送通知,當(dāng)然我們還有其他不同的消息交互的模式,我們把這些不同的信息交互方式稱為MEPMessage Exchange Pattern)。也就是說(shuō),一個(gè)Operation最終通過(guò)被最終轉(zhuǎn)換成了按照某種MEP進(jìn)行的消息交互,而Service Contract旨在實(shí)現(xiàn)對(duì)這種MEP的描述,比如是否需要Request Message或者Response Message(如果僅僅有Response Message就是Notification的方式;如果僅僅具有Request Message,那就是我們上面談到的Request-Forget的模式),和Message本身具有的格式。

  上面我們說(shuō)了Service Contract是以一種廠商中立的形式描述體現(xiàn)為某種模式的消極交互、構(gòu)成整個(gè)Service的所有Operation。而我們也說(shuō)了ConsumerService的交互本質(zhì)上看就是按照某種Pattern體現(xiàn)的一次Message Exchange,好像具有了Service Contract的描述就可以了。但是實(shí)際上,單單有了Service Contract對(duì)Service的描述還不夠,因?yàn)?/span>Service Contract本身缺乏對(duì)攜帶于Message,用于信息傳遞的數(shù)據(jù)類型的描述,而這是Data Contract需要解決的問(wèn)題。我們知道不同的技術(shù)平臺(tái)對(duì)數(shù)據(jù)類型的表示是不一樣的,可能某一種技術(shù)平臺(tái)使用16bit來(lái)表述一個(gè)浮點(diǎn)數(shù),另一種則使用32bit。所以要想實(shí)現(xiàn)不同技術(shù)平臺(tái)的互操作,將不同技術(shù)平臺(tái)同一類型的數(shù)據(jù)以一種廠商中立的形式來(lái)描述是必須的。

  概括的說(shuō),SOA中的Service ContractData Contract就是一種廠商中立的數(shù)據(jù)呈現(xiàn)方式對(duì)Service InterfaceData Type的。而Service的調(diào)用都是通過(guò)SOAP Message來(lái)實(shí)現(xiàn),SOAP是基于XML,而對(duì)于XML結(jié)構(gòu)的定義,我們很自然地想到XSD,我們可簡(jiǎn)單地將SOA中的Contract看成是一個(gè)XSD 
Contract in WCF 

  上面我們實(shí)際上是在一個(gè)廠商中立的前提下探討Contract,這里的Contract和具體的平臺(tái)和技術(shù)無(wú)關(guān)。接下來(lái)我們要談的是基于技術(shù)的話題:討論一下WCF下的Contract。簡(jiǎn)單地說(shuō),WCF中的Contract主要的功能就是如何將一個(gè)基于.NETCLR TypeInterface或者Class,轉(zhuǎn)化成一個(gè)我們上面提到的Neutral Contract。比如,如果我們?cè)谝粋€(gè)Interface和它的成員上分別運(yùn)用Service Contract AttributeOperation Contract,當(dāng)我們Host實(shí)現(xiàn)了該InterfaceService的時(shí)候,WCF就能將在一個(gè).NET-specificCLR Type暴露成一個(gè)Neutral Service Contract。同理對(duì)于一個(gè),我們通過(guò)在一個(gè)Class和它的成員上分別添加DataContractAttributeDataMemberAttribute,就可以就該CLR Type轉(zhuǎn)變成Neutral Data Contract

比如我們一個(gè)運(yùn)用了DataContractAttributeDataMemberAttributeOrder class

namespace Artech.DataContractVersioning.Service
{
    [DataContract(Namespace
="http://artech.datacontractversioning")]
    
public class Order 
    
{
        [DataMember(Order 
= 0)]
        
public Guid OrderID
        
{get;set;}

        [DataMember(Order 
= 1)]
        
public DateTime OrderDate
        
getset; }

        [DataMember(Order 
= 2)]
        
public Guid SupplierID
        
getset; }
    }

}

Data Contract Mapping Mechanism 

  通過(guò)上面的介紹,我們發(fā)現(xiàn)WCF Data Contract就如同一個(gè)適配器,彌合了 CLR TypeNeutral Contract的差異,很容易地實(shí)現(xiàn)了他們之間的匹配。接下來(lái),我們就以一個(gè)實(shí)際的例子來(lái)介紹WCF DataContract的這種適配功能:通過(guò)DataContractAttribute的修飾,實(shí)現(xiàn)了將一個(gè)現(xiàn)有Data Type向一個(gè)既定的Neutral Data Contract進(jìn)行適配,從而實(shí)現(xiàn)了對(duì)基于該Neutral Data ContractService 進(jìn)行正常調(diào)用的目的。

  我們就以上面提到的Order Class為例,Service端的Order class最終暴露成一個(gè)以XSD表示的Neutral Contract

Order class

namespace Artech.DataContractVersioning.Service
{
    [DataContract(Namespace
="http://artech.datacontractversioning")]
    
public class Order 
    
{
        [DataMember(Order 
= 0)]
        
public Guid OrderID
        
{get;set;}

        [DataMember(Order 
= 1)]
        
public DateTime OrderDate
        
getset; }

        [DataMember(Order 
= 2)]
        
public Guid SupplierID
        
getset; }
    }

}

NET技術(shù)[原創(chuàng)]談?wù)刉CF中的Data Contract (1):Data Contract Overview,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 恩施市| 新民市| 古蔺县| 资兴市| 新巴尔虎左旗| 连江县| 建宁县| 五原县| 丁青县| 阿瓦提县| 湄潭县| 鲁山县| 金塔县| 宁海县| 当阳市| 永靖县| 兖州市| 浑源县| 桐城市| 五河县| 金溪县| 弥渡县| 元谋县| 凤山县| 伊宁县| 黄龙县| 富川| 绥江县| 渝中区| 海阳市| 阜宁县| 东乌| 武功县| 东辽县| 新竹市| 饶平县| 镇坪县| 大庆市| 兖州市| 桂东县| 都匀市|