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