WCF從理論到實踐(2):決戰紫禁之巔
系列文章導航:
WCF從理論到實踐(16):操作重載(帶視頻+ppt+源碼)
WCF從理論到實踐(17):OO大背離(帶視頻+ppt+源碼)
本文的出發點
通過閱讀本文,能解決如下問題:
- WCF與以往的分布式技術有何區別?
- WCF 在安全性方面做了哪些改進?
- WCF在性能方面有那些改進?
-
WCF開發模型和以往的其他分布式技術有何區別?
本文適合的讀者
有過分布式開發和SOA相關實施經驗的開發人員
WCF與以往的分布式技術有何區別?
在上篇文章 WCF從理論到實踐一:揭開神秘面紗 中曾經闡述過WCF的前生今世,說的比較概括,本文詳細的說明WCF和以往的分布式技術的區別,目的是讓大家更詳細的了解WcF的應用場合,為日后系統的架構作鋪墊。首先先看下面這張對比表格
WCF與其他分布式技術對比表
Xml Web Service |
.Net Remoting |
Enterprice Service |
WSE |
MSMQ |
WCF |
|
跨平臺 |
√ |
√ |
||||
.Net與.Net通訊 |
√ |
√ |
||||
分布式事務 |
√ |
√ |
||||
安全可靠性 |
√ |
√ |
||||
消息隊列 |
√ |
√ |
上面的表格參考了Bruchzhang文章中的對比圖,原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/05/367474.html
從表格中我們可以看出,WCF似乎等于前面幾項技術之和,但事實并非如此,它既整合了原來的多項技術,而且擁有著自己得天獨厚的優點,如下
:
-
統一性(Integration)
-
互操作性
-
安全可靠(Secure and Reliable)
-
兼容性
WCF 在安全性方面做了哪些改進?
為了保證數據通訊的安全,WCF提供了三種保護措施:1)機密性(Confidentiality)2)完整性(Integrity) 3)可驗證性(Authentication),這三種措施聯合起來被稱為CIA。并且這些措施在WCF中是默認支持的。機密性能保證傳輸的數據是經過加密的,不被非法監聽(eavesdrop),而完整性利用數字簽名技術防止數據在傳輸過程中被注入(injected)或篡改(tampered),而驗證(Authentication)可以采用靈活的策略來處理達到的客戶端請求,比如用戶名密碼驗證,客戶端證書驗證等。為了顯示WCF在安全性方面的特點和優點,我制作了演示程序:Security_Compare方案,這個方案主要通過對比wcf和xml web service的消息來表現wcf在安全方面的改進,工程清單如下:
ProjectName(項目名稱) |
Remark(備注) |
Wcf |
WCF的服務端程序,默認創建,功能未經修改 |
WcfClient |
WCF程序的客戶端,用于調用Wcf |
WebService |
Xml Web Service服務程序,完成功能和Wcf一樣 |
WsClient |
是Xml Web Service的客戶端,用于調用WebService |
為了跟蹤Web Service和WCF的消息,我們還需要了解一下兩個工具:
-
Microsoft SOAP Toolkit Version 3 中的 Trace Utility
-
tcpTrace
原來一直用Trace Utilty來跟蹤xml web service的消息報文,非常好用,它能按包顯示出Soap信息,看起來也非常方便。有關它的消息,請從http://www.microsoft.com/downloads/details.aspx?FamilyId=C943C0DD-CEEC-4088-9753-86F052EC8450&displaylang=en 上下載SOAP Toolkit 3.0,安裝后,便出現了這個工具,在跟蹤xml web service的消息報文的時候,這個工具很好用,但跟蹤wcf的報文卻不行,能截獲到數據,但每個報文都是空的,可能也和wcf報文是經過加密的有關系吧, 搜索了一下,在artech的blog中發現這么一篇文章:[原創]我的WCF之旅(9):如何在WCF中使用tcpTrace來進行Soap Trace,解決了我不能跟蹤wcf消息報文的難題,他也提到Trace Utilty不能跟蹤wcf,同時建議大家使用tcpTrace,并且說明了使用方法,對tcpTrace不熟悉的同學可以到他的blog上學習,很實用,我在這里就不再贅述。
經過我的跟蹤,我分別將Xml web Service的消息log到ws.txt中,將wcf的消息log到wcf.txt中,您可以從下面的本文相關文件下載中獲取這兩個文件,觀察二者在消息上的不同。用于演示的示例解決方案您也在相關文件下載中獲得。
WCF在性能方面有那些改進?
大家都知道,越復雜,結構層次越多的框架一般效率也越低,WCF是以往其他分布式技術的集成者,它結構相對復雜,且由于默認支持安全傳輸,在性能上應該不如Xml Web Service技術,更不用和.Net Remoting等比較,這是一個有框架設計經驗和架構師們都明白的簡單道理,但是事實怎么樣呢?wcf比xml web service性能到底是高還是底,低要低多少?這些問題很值得大家的研究和討論,其實已經有人在此方面做了很詳細的對比,msdn上便有一篇專門介紹此方面知識的文章: WCF Performance Comparison ,對wcf性能感興趣的同學,可以到這文章中學習。很詳盡。限于條件的限制,我這里只在我一臺機器上作一個簡單的對比,僅供參考。分別測試循環1000次對wcf和xml web service相同功能方法的調用,得到如下的數據:
WCF |
Web Service |
|
第一次 |
9523ms |
7561ms |
第二次 |
9480ms |
7465ms |
第三次 |
9508ms |
7708ms |
第四次 |
9487ms |
7900ms |
經過四次測試數據,我們可以得出,wcf的性能和xml web service相比的確要低,但差別不大,肯定在一個數量級之上。有關測試性能的解決方案Perfermence_Compare您能在相關文件下載中獲得。
WCF開發模型和以往的其他分布式技術有何區別?
WCF不僅僅在功能上集成了以往的分布式開發技術,而且在編程模型中充分吸取原來技術的優點,如xml web service的聲明性編程(declareable),和.net remoting中的配置(configuration)和wse中的安全策略聲明性配置方法,這樣wcf雖然功能強大,而且學習簡單,便于推廣。在vs2008中還集成了WCF Test Client,開發服務的時候,甚至不需要再開發測試客戶端就能用WCF Test Client來進行調用,簡單之極,示例程序更是無需更改以行代碼,便可以運行。
上面這些是說了wse編程的簡單易學性,我總結出來,主要包括以下幾種特性
- 基于聲明性編程模型
- 充分利用配置來實現框架的靈活。
-
使用配置的同時,仍保留代碼編程的模型,使得框架更加豐富,便于控制。
-
默認的CIA支持,極大地簡化了安全控制
相關示例文件
-
安全對比示例解決方案Security_Compare: /Files/jillzhang/Security_Compare.rar
-
跟蹤soap消息的工具tcpTrace: /Files/jillzhang/tcpTrace.rar
-
安全對比示例跟蹤結果: /Files/jillzhang/wcf.txt , /Files/jillzhang/ws.txt
-
性能測試解決方案Perfermence_Compare: /Files/jillzhang/Perfermence_Compare.rar
示例程序和本文對比測試的平臺依據
windows xp sp2 + visual studio.net 2008 rtm
參考資料