程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF從理論到實踐(2):決戰紫禁之巅

WCF從理論到實踐(2):決戰紫禁之巅

編輯:關於.NET

本文的出發點

通過閱讀本文,能解決如下問題:

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

跟蹤soap消息的工具tcpTrace

安全對比示例跟蹤結果

性能測試解決方案Perfermence_Compare

示例程序和本文對比測試的平台依據

windows xp sp2 + visual studio.net 2008 rtm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved