SOA 设计原则和 Web 服务中的数据传输
SOA 被翻譯為面向服務架構,它應該是創建從自治服務生成系統的一個架構方法,它的目的是更方便地進行集成。
SOA是Web 服務的一個自然延伸,因為Web 服務只是解決了異構系統之間的互操作,并沒有降低Web 服務之間的耦合度。
而關于SOA,有太多關于這個名詞的闡述和其他新鮮名詞:SCA、SDO、ESB等,本文要討論的是什么是服務、面向服務架構的設計原則和Web 服務中的數據傳輸。
什么是服務?
簡單來說就是一個提供消息交換交互、滿足特定功能的程序而已。它具有可用性和穩定性,同時也是松耦合的。服務長期存在,但是服務的配置和聚合必須能適應變化。
如何設計服務?
無他,把 OO 設計準則拿到 Web 服務領域而已,John Evdemon 在這篇文章(http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp)里面談到SOA的設計原則,中文在這里(http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/SOADesign.mspx)。
有以下四個設計原則:
一:邊界清楚(Boundaries Are Explicit)
?通過WSDL發布服務協定(流程和數據形式)、使用消息傳遞而不是RPC調用、提供結構良好的公共接口并保持靜態。
二: 自治(Services Are Autonomous)
?服務的部署和版本變遷應該要獨立于服務的部署和使用者、服務發布后接口即不可更改,做為服務提供者,要預料到服務有可能被誤用或者服務的使用者出現問題。
三: 共享架構和協定而非類(Services Share Schema and Contract, Not Class)
?采用 XML 架構定義消息交換格式、采用 WSDL 定義消息交換模式、采用 Web 服務策略(WS-Policy) 定義功能和需求、采用BPEL(Business Process Execution Language,業務流程執行語言)做為業務流程級別的協定,以聚合多個服務。??
四: 服務兼容性基于策略(Service Compatibility Is Based Upon Policy)
?策略表達式可用于分隔化兼容性性和語義兼容性。WS-Policy 規范定義了一個能夠表達服務級策略的機器可讀的策略框架。關于WS-Policy的介紹,請參見:http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-policy.asp
?中文在這里(http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/Usdnglobspecwspolicy.mspx)
?
采用何種格式在 Web 服務中傳輸數據?
?在選擇傳遞數據所使用的機制上,有以下幾種方法可供選擇:DataSet、類型化DataSet、自定義集合、普通 XML 文件
?類型化DataSet只是在通用DataSet上增加了一些附加功能,還應該屬于DataSet,可以被認為是一種格式。
?DataSet:
?使用它的理由有:可以把任何數據源的數據整合在一起進行傳遞;
?支持序列化,可以方便地和文本流進行轉換;在.NET 2.0 中,連DataTable都開始支持序列化;
?在.NET中對DataSet進行操作也比較簡便,開發工作量也比較小。
?而不應該在Web服務中采用DataSet的理由是:
?Web服務的設計目的是用來解決異構系統之間的數據通信問題的,數據就是以消息的形式在服務之間進行傳遞。而將一個其它服務或系統無法理解的DataSet放在Web服務中傳輸,是否已經違背了Web服務設計時的初衷?
?題外話:.NET 2.0 中增加了SerializationFormat.Binary,是否助長了這種風潮?是否有更多的開發者在應該使用.NET Remoting的場合“過度使用”了Web服務?
?直接使用DataSet的WriteXML方法和ReadXML方法來轉換XML不采用其它措施的話,XML文件中會包含大量的架構信息,占用了寶貴的帶寬資源;
?
?自定義集合:
?最大限度的支持自定義,可解決DataSet的隱式數據轉換和效率問題,但是需要額外的代碼來實現數據的訪問并需要實現ISerializable接口來支持序列化,可能開發的工作量是最大的。
?
?普通XML文件:
?可以直接進行傳輸,需要編寫解析程序將數據提取出來。
?
?如果使用Web服務的目的僅僅是為了穿透防火墻,不考慮異構系統直接的通訊的話,采用DataSet可能是比較好的方案。
?如果性能是首先要考慮的問題,應該會采用自定義集合。
?如果異構系統之間通訊的話,肯定應該采用普通XML文件。
轉載于:https://www.cnblogs.com/xlzhu/archive/2006/04/07/369641.html
總結
以上是生活随笔為你收集整理的SOA 设计原则和 Web 服务中的数据传输的全部內容,希望文章能夠幫你解決所遇到的問題。