官术网_书友最值得收藏!

前言

第一次邂逅WCF是在微軟舉辦的一場關于Windows Vista技術推廣的培訓上,時間大概是2005年10月份,當時我對WCF可謂一見鐘情。如果讀者也像我一樣,之前習慣了采用.NET Remoting、XML Web Service、WSE、MSMQ來架構分布式應用的話,應該不難想象我第一次接觸WCF時心中的那份震撼。WCF是Windows平臺下所有分布式技術集大成者,它將這一系列獨立的分布式技術整合,提供一個統一的應用編程接口,這本身就是一項創舉。這些被整合的分布式技術不僅僅包含前面提到的這些,還包括DCOM、Enterprise Service等。WCF并非單純地將它們進行簡單的累加,而是從底而上進行了革新性的重新設計,使WCF成為了一個可定制、可擴展的通信框架。

WCF,全稱Windows Communication Foundation,從命名上我們就不難看出微軟對WCF所寄予的厚望,他們要將WCF打造成為Windows平臺下唯一的通信基礎框架。從WCF這些年的發展使用,以及未來趨勢的預測來看,WCF沒有辱沒這樣的使命。這幾年持續灼熱的SOA尚未有降溫的跡象,云計算又開始沸騰了。不論是SOA,還是云計算,都須要解決一個核心的問題,那就是通信(Communication),而WCF解決的就是通信問題。相信大家不難想象WCF在整個Windows產品體系中將會具有怎樣的一個“江湖地位”。

基于對WCF的濃厚興趣,我這些年來一直沒有放棄對WCF的研究,加上在眾多項目中的實踐,我逐漸對WCF有了一些積累。在寫這本書之前,我閱讀了現今已經出版的絕大部分WCF著作,并訂閱了很多WCF專家的博客,一遍又一遍地翻看MSDN,我想可能很少有人會像我一樣一次又一次地從頭到尾閱讀WCF MSDN。在獲取知識的過程中,我發現了這樣的一個現象:通過上述這些途徑獲取的資料絕大部分都僅限于WCF編程層面的介紹。若試圖了解整個WCF一些底層的實現機制,是很難找到相關參考資料的。在這些年的學習和項目實踐中,不論是對于WCF的編程模型、底層實現,還是設計思想,我感覺都有了一定的積累和沉淀。所以希望盡我所能,寫一部全面剖析WCF的書籍,與讀者分享。

在工作中,有讀者可能會這樣想:我僅僅是一個普通的WCF編程人員或項目實施人員,只須要知道WCF程序如何編寫和配置就可以了,何須花那么多時間和精力去了解所謂的實現原理和設計模式呢。我個人認為這樣的想法是片面的,正如一個對.NET Framework不了解的人不可能寫出高質量的.NET程序一樣,一個對WCF實現機制完全不了解的人也難以寫出高質量的WCF服務。至于設計,如果不理解面向服務(SO:Service Orientation)的設計思想,還是按照傳統的面向組件(CO:Component Orientation)來設計WCF服務,那將是對WCF最大的誤用。

WCF不但提供了強大的通信功能,而且還是一個極具可擴展性的通信框架。WCF的通信實現是一個相對復雜的流程,它在整個通信處理流程中為每一個步驟提供了擴展點。用戶可以通過實現相關的接口,或者繼承相應的基類,自定義這些擴展的組件。最終通過配置或其他方式(比如應用自定義特性)將這些定制的組件應用到WCF的整個處理流程中,從而改變WCF的通信行為,讓WCF按照你希望的方式工作。當然,自由靈活地對WCF進行擴展要建立在你對WCF的底層實現充分了解的基礎之上。

由于WCF涉及的內容實在太多,《WCF技術剖析》不得不拆分為多卷來寫。卷1首先出版,隨后會進行卷2的寫作。

本書的特點

如果要說出《WCF技術剖析》具有哪些市面上其他WCF圖書不具備的特點的話,我覺得可以通過以下三個“注重”來概括。

注重原理

“知其然,且知其所以然”,對一項技術實現原理的把握能夠幫助你更加有效地利用這項技術。WCF建立在.NET平臺下,提供基于托管代碼的應用編程接口(API),在編程層面不會太復雜,也很容易入手。但是,如果希望通過WCF構建一個具有高性能、高可維護性、高可擴展性的分布式應用,就要求架構師、設計師和開發者對WCF的實現機制,以及面向服務的設計原理具有正確、全面而深入的理解。當然,介紹WCF編程的內容,任何一本關于WCF的圖書都是必需的,《WCF技術剖析》也不例外,不過,它和那些完全介紹WCF編程的書不同的是,本書中此類內容僅占全部內容的一半左右。

注重細節

“細節決定成敗”,如果將2/8原則應用到編程領域,它將體現在:花20%的時間編寫出80%程序主體,而80%的時間用于編寫剩下20%核心程序并糾錯和解決Bug。這些Bug的產生往往由于對細節不夠重視所導致。《WCF技術剖析》會介紹一些常被人們忽視而導致產品Bug的細節,這些細節多源自于筆者這些年來實踐的積累和總結。

注重實踐

“實踐出真知”,不斷地在具體應用中進行實踐是學習WCF最有效的手段。實踐是檢驗真理的唯一標準,通過將所學的WCF的知識應用到一個真正的應用之中,才能確保我們掌握的知識的正確性。此外,實踐不但可以鞏固我們的所學,還會讓我們意識到不足。《WCF技術剖析》在每一章節都會提供一系列的案例演示,通過一個個具體案例應用去實踐WCF。

本書為誰而作

本書的內容不僅適合那些尚未接觸過WCF,希望盡快入門并進行深入研究的開發人員,同樣適合那些對WCF具有一定了解的開發設計人員和架構師。相信不同層次的讀者都能從本書中找到自己希望了解的部分。閱讀本書的讀者須要對.NET,包括對C#和.NET Framework具有一定的了解。如果讀者具備了DCOM、Enterprise Library Service、.NET Remoting、Web Service、MSMQ及SOA相關的基礎,對閱讀此書盡快掌握WCF將大有裨益。

本書的結構

本書以分卷的形式出版,第1卷率先完稿,后續部分也已列入作者的寫作計劃。《WCF技術剖析(卷1)》涵蓋WCF最基本的框架,相關的內容已經賦予了讀者構建一個基本WCF應用的能力。本卷共分10章,各章的內容如下。

第1章 WCF簡介(WCF Overview)

本章簡單講述了WCF產生的歷史背景,以及WCF在微軟產品線中所處的地位。本章的最后將提供一個功能簡單,但結構完整的WCF事例應用程序。該事例應用程序涵蓋了構建一個基本WCF應用所需的所有步驟,其中包括服務契約(Service Contract)的定義、服務的實現、服務的寄宿(Service Hosting)、元數據(Metadata)的發布和導入、服務代理的創建和服務調用等。在一步一步對案例應用進行演示的過程中,還穿插介紹了WCF的一些基本概念和原理,比如終結點(Endpoint)、地址(Address)、綁定(Binding)、契約(Contract)、元數據(Metadata)、服務寄宿(Service Hosting)等。

第2章 終結點地址與WCF尋址(Endpoint Address and WCF Addressing)

本章著重介紹終結點三要素之一的“地址(Address)”和相關的尋址(Addressing)機制。在本章中,我們會談到不同網絡協議地址之間的差異,以及如何在服務寄宿和服務調用的時候通過代碼或配置的方式設定終結點的地址。本章涉及的內容還包括通過地址報頭(Address Header)的形式為消息添加尋址信息,以及端口共享在WCF中的應用。本章的最后將深入介紹WCF下尋址的實現機制。

第3章 綁定和信道棧(Binding and Channel Stack)

本章著重介紹終結點的第二個元素:“綁定(Binding)”,并以綁定作為切入點,對WCF整個信道層進行深入而詳細的講解。本章會介紹WCF信道層所涉及的所有相關組件,包括信道(Channel)、信道管理器(Channel Manager)、信道監聽器(Channel Listener)、信道工廠(Channel Factory)、綁定元素(Binding Element),以及綁定上下文(Binding Context)等。在本章的最后還會對常見的系統綁定進行全面的剖析和比較,并且指導讀者創建自定義的綁定。

第4章 服務契約(Service Contract)

終結點的服務契約元素的介紹放在本書的第4章。為了讓讀者深入理解契約的本質,在本章的一開始,我們將從“抽象與接口”、“服務描述”及“消息交換模式”全方位、多角度透視WCF中的服務契約。緊接著,將詳細介紹如何通過ServiceContractAttribute和OperationContractAttribute這兩個自定義特性來定義服務契約。在本章的最后,將會深入探討操作契約和消息交換模式之間的關系,以及如何定義適合多線程場景中的服務契約。

第5章 序列化與數據契約(Serialization and Data Contract)

本章著重介紹WCF對“數據”的處理,包括數據的定義(數據契約)和數據的序列化及反序列化。本章將從序列化在一個分布式應用中所起的重要作用談起,然后詳細介紹數據契約的定義,以及數據契約序列化器(DataContract Serializer)進行序列化和反序列化的實現原理和規律。本章涉及的內容還包括:如何為數據契約序列化器設定已知類型(KnownType),以及已知類型在序列化和反序列化過程中所起的重要作用;如何定義基于范型數據契約和集合數據契約;等價數據契約在WCF消息交換中的意義。在本章的最后,我們將介紹在整個WCF消息分發、處理流程中,是如何實現數據的序列化和反序列化的。

第6章 消息、消息契約與消息編碼(Message,Message Contract and Message Encoding)

本章的所有內容都是圍繞著消息(Message)展開的,首先我們會通過SOAP1.2規范介紹一個SOAP消息的基本結構,并由此引出消息在WCF的表示:System.ServiceModel. Channels.Message類型的介紹。在介紹Message類型的時候,將重點介紹消息處理中消息對象表現出來的狀態機(State Machine)。接下來會介紹消息契約(Message Contract)的定義,以及消息契約的應用場景的選擇。消息編碼(Message Encoding)是本章的重點,我們會對WCF采用的3種典型的編碼方式進行全面的分析和比較,在本節的最后部分還會深入介紹消息編碼分別在WCF服務端與客戶端框架中的實現原理。

第7章 服務寄宿(Service Hosting)

服務的寄宿是部署服務必需的步驟,為了讓讀者了解服務寄宿(Service Hosting)的本質,我們會從服務描述(Service Description)談起。接下來再深入探討在服務寄宿的每一個步驟中,WCF內容為我們作了哪些“鮮為人知”的操作。本章的后半部分,我們會討論4種常見的服務寄宿方式,包括自我寄宿(Self-Hosting)、IIS寄宿(IIS Hosting)、WAS寄宿(WAS Hosting)和Windows Service寄宿(Windows Service Hosting)。在介紹基于IIS服務寄宿的過程中,我們會對不同版本的IIS(IIS5.x, IIS 6.0, IIS 7.0)的工作機制進行全面的分析和比較,并就IIS和ASP.NET管道之間的通信進行詳細介紹。此外,還會深入介紹兩種不同模式下,即ASP.NET并行(ASP.NET Side by Side)模式和ASP.NET兼容(ASP.NET Compatible)模式,實現WCF服務寄宿的實現原理和表現行為。

第8章 客戶端(Client)

本章主要介紹在客戶端如何創建服務代理進行服務調用,以及WCF客戶端框架內部如何完成一次正常的服務調用。WCF具有兩種典型的服務調用方式:通過添加服務引用或通過相應的工具導入元數據并聲稱客戶端代理類型(繼承字ClientBase<T>)和相關配置;借助ChannelFactory<T>直接創建服務代理對象。通過本章的介紹,你將對這兩種服務調用方式具有一個全面的認識,本章還將深入剖析ClientBase<T>和ChannelFactory<T>這兩個重要的類型。在本章的最后部分會為你提供基于會話服務調用的最佳實踐。

第9章 實例管理與會話(Instancing and Session)

實例化(Instancing)和會話(Session)是WCF中兩個重要的概念,前者旨在實現服務實例對象的激活,后者則實現對客戶端調用狀態的保持。本章將詳細介紹WCF 3種典型的實例化模式所表現的行為、實現的原理及各自適合的場景。在介紹會話的部分會深入剖析會話如何保持客戶端多次服務調用的狀態,以及會話、實例化模式、綁定和信道之間的關系。

第10章 WCF實例研究(WCF in Practice)

《WCF深入剖析(卷1)》將為你提供一個WCF版本的PetShop,通過一個具體實在的例子,指導讀者如何利用WCF構建一個完整的分布式應用。在該案例應用中,不僅僅會為你提供單純WCF相關的應用,還引入了一系列設計模式,包括:模塊化與層次化設計、面向方面編程(AOP,Aspect Oriented Programming)、控制倒置(IoC,Inverse of Control)與依賴注入(DI,Dependency Injection)、MVP(Mode-View-Presenter)模式等。我們還會根據PetShop,介紹如何通過WCF擴展實現與微軟開源開發框架企業庫集成,比如通過與Unity的繼承將DI容器引入WCF應用服務實例的創建;通過與EHAB(Exception Handling Application Block)繼承實現可配置的異常處理;通過Unity與PIAB(Policy Injection Application Block)將實現基于AOP的編程等。

關于《WCF技術剖析(卷2)》

《WCF技術剖析(卷2)》將按照與卷1相似的方式對WCF一些相對“高級”的主題進行介紹,大概的內容包括:異常處理(Exception Handling)、元數據(Metadata)、并發與流量限制(Concurrency and Throttling)、事務(Transaction)、安全(Security)、WCF分發體系(WCF Dispatching System)、WCF擴展(WCF Extension)等。

關于作者

蔣金楠,網名Artech,現就職于某知名軟件公司擔任高級軟件顧問(Senior Software Consultant)。微軟解決方案架構(Solutions Architecture)與互聯系統(Connected System)雙料MVP(最有價值專家),具有5年以上軟件開發設計與架構經驗。對.NET Framework、C#、ASP.NET、SQL Server、設計模式、軟件架構及主流的開源框架具有深入的研究。屬國內較早接觸WCF的人之一,同時對.NET Remoting、MSMQ通信技術有深入的理解。2007年2月起在個人博客(http://www.cnblogs.com/artech)上發表數十篇深入介紹WCF的文章,成為國內WCF技術最早的推廣者之一。

致謝

本書得以出版,最應該感謝的人是博文視點的資深編輯周筠女士和楊繡國(Lisa)女士,她們的專業能力和認真的工作態度給我留下深刻的印象,感謝Lisa在我因工作原因不能按時交稿時給予的理解。兩個月后,Lisa即將初為人母,在這里表示衷心的祝福。同時,要感謝博客園的創始人杜勇為我們創建了一個這么好的技術學習和交流的平臺,而且本書的出版也依賴于杜勇本人的推薦。此外,還要感謝郭金鏈、葛子昂、黃昕、李會軍、孟永剛、王翔、曲春雨、王森(臺灣)、張逸、張玉彬等人在百忙之中為本書審稿,并提出寶貴的建議,本人收益良多。同時曲春雨、李會軍和王翔三位老師還為本書寫了推薦序,感謝之情無以言表。最后要感謝我博客文章的所有讀者,是你們讓我具有了創作的勇氣。

當然,必須感謝我的父母,他們賜予我一顆不算愚笨的腦袋,并從小培養我獨立思考的習慣。感謝我未來的老婆徐妍妍,當我才思枯竭的時候同她談心總能讓我靈感四溢。在本書創作期間,發生了一些事情給她們全家帶來了難以愈合的傷口,希望時間能夠盡快治愈她們心靈的創傷,祝她的家人永遠健康幸福。

本書的支持

本書涉及的很多WCF底層實現的內容,大多不能通過官方的渠道獲取。它們來自本人對WCF源代碼的分析、通過應用程序的證明,以及這些年來使用WCF經驗的總結。由于能力有限,對于本書涉及的內容,難免存在原理或表達上的偏差。如果讀者在閱讀本書過程中,發現任何問題可以直接向我本人反饋。如果你遇到任何WCF相關的問題,也可以和我一起交流。

作者博客:http://www.cnblogs.com/artech

郵箱地址:jiangjinnan@gmail.com

主站蜘蛛池模板: 郸城县| 二手房| 乌兰县| 遂宁市| 视频| 嘉峪关市| 房山区| 吕梁市| 安庆市| 福鼎市| 红安县| 利辛县| 梨树县| 齐齐哈尔市| 莒南县| 湖州市| 廊坊市| 墨竹工卡县| 丹棱县| 庆元县| 苍溪县| 巴楚县| 永丰县| 贵南县| 石景山区| 景泰县| 章丘市| 琼海市| 手游| 扶绥县| 略阳县| 海兴县| 松原市| 田东县| 乌审旗| 钟祥市| 永平县| 观塘区| 高尔夫| 荆门市| 新邵县|