WCF學習之旅目錄
一、WCF概述
1) 什么是WCF?
Windows Communication Foundation (WCF) 是用於構建面向服務的應用程序的框架。借助 WCF,可以將數據作為異步消息從一個服務終結點發送至另一個服務終結點。服務終結點可以是由 IIS 承載的持續可用的服務的一部分,也可以是應用程序中承載的服務。終結點可以是從服務終結點請求數據的服務客戶端。簡單消息可以是作為 XML 發送的單個字符或單個單詞,復雜消息可以是二進制數據流。一些示例方案包括:
- 處理企業事務的安全服務。
- 將當前數據提供給其他服務(例如流量報告或其他監視服務)的服務。
- 使兩個人能夠實時通信或交換數據的聊天服務。
- 輪詢一個或多個服務以查找數據並將其以邏輯表現形式展示出來的面板應用程序。
- 將使用 Windows Workflow Foundation 實現的工作流作為 WCF 服務公開。
- 輪詢服務以查找最新數據源的 Silverlight 應用程序。
雖然在 WCF 存在之前就可以創建此類應用程序,但 WCF 使終結點的開發比以前更容易。整合了windows中原有的通訊技術產,包括 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。是Windows平台上開發分布式應用最佳的技術。總之,WCF 設計提供一種用於創建 Web 服務和 Web 服務客戶端的可管理的方式。
2) WCF 包括以下功能集。
- 服務導向
使用 WS 標准的一個結果是,WCF 允許您創建面向服務的應用程序。面向服務的體系結構 (SOA) 依賴 Web 服務發送和接收數據。這些服務具有松耦合的常規優點,而不是從一個應用程序到另一個應用程序進行硬編碼。松耦合關系意味着只要符合基本協定,則在任何平台上創建的任何客戶端均可連接到所有服務。
- 互操作性
WCF 實現了 Web 服務互操作性的現代行業標准。
- 多種消息模式
采用多種模式之一交換消息。最常用的模式是請求/答復模式,其中一個終結點從另一個終結點請求數據,另一個終結點進行答復。還有其他模式,比如單向消息,其中只有一個終結點發送消息,而不期望得到答復。更復雜的模式是雙工交換模式,在該模式下,兩個終結點建立連接並來回發送數據,類似於即時消息傳遞程序。
- 服務元數據
WCF 支持使用行業標准(如 WSDL、XML 架構和 WS-Policy)中指定的格式發布服務元數據。該元數據可用於自動生成並配置客戶端,以便訪問 WCF 服務。可通過 HTTP 和 HTTPS 來發布元數據,也可使用 Web 服務元數據交換標准來發布元數據。
- 數據協定
由於 WCF 是使用 .NET Framework 生成的,因此它也包括代碼友好的方法,用於提供希望強制執行的協定。數據協定就是其中一種通用類型的協定。實質上,當您使用 Visual C# 或 Visual Basic 對服務進行編碼時,處理數據的最簡單方法是使用屬於數據實體的屬性創建表示該數據實體的類。WCF 包括一個以這種輕松的方式處理數據的綜合系統。在創建了表示數據的類之后,服務會自動生成使客戶端能夠符合所設計數據類型的元數據。
- 安全性
可對消息進加密以保護隱私,而且可以要求用戶對其自身進行身份驗證,然后才允許接收消息。可使用眾所周知的標准(如 SSL 或 WS-SecureConversation)實現安全性。
- 多種傳輸和編碼方式
可通過多種內置傳輸協議和編碼中的任意一種發送消息。最常用的協議和編碼是使用超文本傳輸協議 (HTTP) 發送文本編碼的 SOAP 消息,以便在萬維網上使用。此外,WCF 還允許通過 TCP、命名管道或 MSMQ 發送消息。這些消息可以編碼為文本,也可以使用優化的二進制格式。使用 MTOM 標准可有效地發送二進制數據。如果所提供的傳輸或編碼都不符合您的需要,您可以創建自己的自定義傳輸或編碼。
- 可靠的排隊消息
WCF 支持使用通過 WS-Reliable Messaging 實現的可靠會話和使用 MSMQ 進行可靠的消息交換。
- 持久性消息
持久性消息決不會由於通信中斷而丟失。持久性消息模式的消息會始終保存到數據庫中。如果發生中斷,數據庫將允許您在恢復連接后恢復消息交換。此外,也可以使用 Windows Workflow Foundation (WWF) 來創建持久性消息。
- 事務
WCF 還使用三個事務模型之一來支持事務:WS-AtomicTtransactions、System.Transactions 命名空間中的 API 以及 Microsoft 分布式事務協調器。
- AJAX 和 REST 支持
REST 是不斷發展的 Web 2.0 技術的一個示例。WCF 可以配置為處理未包裝在 SOAP 信封中的“純文本”XML 數據。WCF 還可以擴展以支持特定的 XML 格式,如 ATOM(流行的 RSS 標准),甚至支持非 XML 格式(如 JavaScript 對象表示法 (JSON))。
- 擴展性
WCF 體系結構具有大量擴展點。如果需要額外功能,它還提供許多入口點,允許您自定義服務的行為。有關以下內容的詳細信息可用擴展點,
3) WCF 體系結構
4) WCF與WEB API的異同
WCF 是 Microsoft 為生成面向服務的應用程序而提供的統一編程模型。借助這一模型,開發人員可以構建既能跨平台與現有投資集成又能與現有投資交互的安全、可靠的事務處理解決方案。 ASP.NET Web API 是一個用來方便地生成 HTTP 服務的框架,這些服務可訪問廣泛的客戶端,包括瀏覽器和移動設備。ASP.NET Web API 是用於在 .NET Framework 上生成 RESTful 應用程序的理想平台。
WCF |
ASP.NET Web API |
啟用支持多種傳輸協議(HTTP、TCP、UDP 和自定義傳輸)的生成服務,並允許在這些服務之間切換。 |
僅限 HTTP。用於 HTTP 的第一類編程模型。更適合從各種瀏覽器、移動設備等進行訪問,可實現大范圍訪問。 |
啟用支持同一消息類型的多種編碼(文本、MTOM 和二進制)的生成服務,並允許在這些服務之間切換。 |
啟用支持廣泛的媒體類型(包括 XML、JSON 等)的生成 Web API。 |
支持采用 WS-* 標准的生成服務,如可靠消息傳遞、事務、消息安全性。 |
使用基本協議和格式,如 HTTP、WebSocket、SSL、JQuery、JSON 和 XML。不支持較高級別的協議,如消息傳遞或事務。 |
支持請求-答復、單向和雙工消息交換模式。 |
HTTP 是請求/響應,不過,通過 SignalR 和 WebSocket 集成,可集成其他模式。 |
可以在 WSDL 中描述 WCF SOAP 服務,從而可通過自動工具,針對具有復雜架構的服務來生成客戶端代理。 |
可通過各種方法來描述 Web API:從用於描述代碼片段的自動生成的 HTML 幫助頁,直至用於 OData 集成 API 的結構化元數據。 |
隨 .NET Framework 一起提供。 |
隨 .NET Framework 一起提供,但它是一個開放源代碼程序,也可通過獨立下載以帶外方式獲得。 |
5)WCF的優勢
在David Chappell所撰的《Introducing Windows Communication Foundation》一文中,用了一個活鮮鮮的例子,來說明WCF的優勢所在。假定我們要為一家汽車租賃公司開發一個新的應用程序,用於租車預約服務。該租車預約服務會被多種應用程序訪問,包括呼叫中心(Call Center),基於J2EE的租車預約服務以及合作伙伴的應用程序(Partner Application)
從功能的角度來看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技術的並集。(注:這種說法僅僅是從功能的角度。事實上WCF遠非簡單的並集這樣簡單,它是真正面向服務的產品,它已經改變了通常的開發模式。)因此,對於上述汽車預約服務系統的例子,利用WCF,就可以解決包括安全、可信賴、互操作、跨平台通信等等需求。開發者再不用去分別了解.Net Remoting,ASMX等各種技術了。
從實際開發來講,基於Asp.Net的應用程序開發與基於WCF 的面向服務的應用程序開發的區別:
(1)在基於Asp.net 的應用程序開發中。我們由客戶機的瀏覽器訪問應用程序服務器,然后通過應用程序服務器中的數據庫連接去連接數據庫服務器,讀取或是操作數據,有時候可能會多一個文件服務器。大家可以觀察到,基本上所有的應用都放在了一台服務器上,但對於一個,由於業務上的需要(如:與外部系統交互),一台服務器很難支持所有的應用。如下圖。
(2) 基於WCF面向服務的應用程序開發中。客戶機使用瀏覽器訪問服務器A,服務器A為了業務需要與其他各種應用部署在服 務器B、C、D....再通過WCF技術互相通信,相互訪問...然而面向服務的好處不僅僅在此,他還提供了不同語言不同操作系統的可交互性。如下圖。
在上篇文章中我們創建了一個簡單的WCF服務應用程序。本文將會把上文的WCF服務應用程序改造一下,增加數據庫交互的操作。接下來我們一步一步來進行WCF服務應用程序的創建。