探討WCF面向服務(wù)變遷過程
大家通過對(duì)WCF的學(xué)習(xí),可以體會(huì)到其功能的強(qiáng)大性。在這里為大家介紹的WCF面向服務(wù),則是一組公開的功能集合。這里我發(fā)表一下個(gè)人理解,和大家討論討論。#t#
從軟件設(shè)計(jì)的角度考慮,軟件設(shè)計(jì)思想經(jīng)歷了從函數(shù)發(fā)展到對(duì)象,從對(duì)象發(fā)展到組件,再從組件發(fā)展到服務(wù)的幾次變遷。
在這樣一個(gè)漫長的發(fā)展旅程中,***發(fā)展到服務(wù)的一步可以說是***革新意義的一次飛躍。WCF面向服務(wù)(Service-Orientation,SO)是一組原則的抽象,是創(chuàng)建面向服務(wù)應(yīng)用程序的***實(shí)踐。如果你不熟悉面向服務(wù)的原則,可以參見附錄A,它介紹了使用WCF面向服務(wù)的概況與目的。
本書假定你對(duì)這些原則已經(jīng)了然于胸。一個(gè)WCF面向服務(wù)應(yīng)用程序(SOA)將眾多服務(wù)聚集到單個(gè)邏輯的應(yīng)用程序中,這就類似于面向組件的應(yīng)用程序聚合組件,或者面向?qū)ο蟮膽?yīng)用程序聚合對(duì)象。
服務(wù)可以是本地的,也可以是遠(yuǎn)程的,可以由多個(gè)參與方使用任意技術(shù)進(jìn)行開發(fā)。服務(wù)與版本無關(guān),甚至可以在不同的時(shí)區(qū)同時(shí)執(zhí)行。服務(wù)內(nèi)部包含了諸如語言、技術(shù)、平臺(tái)、版本與框架等諸多概念,而服務(wù)之間的交互,則只允許指定的通信模式。
服務(wù)的客戶端只是使用服務(wù)功能的一方。理論上講,客戶端可以是任意的Windows窗體類、ASP.NET頁面或其他服務(wù)。
端與服務(wù)通過消息的發(fā)送與接收進(jìn)行交互。消息可以直接在客戶端與服務(wù)之間進(jìn)行傳遞,也可以通過中間方進(jìn)行傳遞。WCF中的所有消息均為SOAP消息。注意WCF的消息與傳輸協(xié)議無關(guān),這與Web服務(wù)不同。因此,WCF服務(wù)可以在不同的協(xié)議之間傳輸,而不僅限于HTTP。
WCF客戶端可以與非WCF服務(wù)完成互操作,而WCF面向服務(wù)也可以與非WCF客戶端交互。不過,如果需要同時(shí)開發(fā)客戶端與服務(wù),則創(chuàng)建的應(yīng)用程序兩端都要求支持WCF,這樣才能利用WCF的特定優(yōu)勢。
因?yàn)榉?wù)的創(chuàng)建對(duì)于外界而言是不透明的,所以WCF服務(wù)通常通過公開元數(shù)據(jù)(Metadata)的方式描述可用的功能以及服務(wù)可能采用的通信方式。元數(shù)據(jù)的發(fā)布可以預(yù)先定義,它與具體的技術(shù)無關(guān)(Technology- Neutral),例如采用基于HTTP-GET方式的WSDL,或者符合元數(shù)據(jù)交換的行業(yè)標(biāo)準(zhǔn)。
一個(gè)非WCF客戶端可以將元數(shù)據(jù)作為本地類型導(dǎo)入到本地環(huán)境中。相似的,WCF客戶端也可以導(dǎo)入非WCF面向服務(wù)的元數(shù)據(jù),然后以本地CLR類與接口的方式進(jìn)行調(diào)用。