wcf的簡單介紹

2021-08-25 18:38:54 字數 3772 閱讀 8226

3、為什麼我們要選用wcf?

在windows平台下,尤其是在.net平台下開發面向服務的應用程式,或者開發分布式系統,最佳選擇就是wcf。為什麼呢?原因就在於wcf涵蓋了之前微軟推出的所有用於分布式開發的技術,包括remoting、web services、wse、msmq等,並以一種統一的程式設計模式來實現。

wcf既支援具有互操作性的web服務,也能夠實現.net客戶端與.net服務端的通訊,提供了分布式事務的支援,同時在安全性上,它完全遵循了ws-*的標準,此外,它還支援佇列服務,可以非常方便地利用訊息佇列完成非同步操作與離線呼叫。而這些功能,以前的技術都只是部分的實現。如下表所示:

特性web service

.net remoting

enterprise services

wsemsmq

wcf具有互操作性的web服務

支援支援

.net到.net的通訊

支援支援

分布式事務

支援支援

支援ws標準

支援支援

訊息佇列

支援支援

wcf同時也使得面向服務程式設計更加簡單而統一了。如果採用舊有的技術,由於各種技術的程式設計模型完全不一致,使得程式的遷移非常的困難。例如,最初採用.net remoting技術開發的分布式系統,由於業務需求的變化,要求發布具有互操作性的web服務,就需要重新定義服務。並且,客戶端的呼叫方式也發生了變化,需要新增web引用,通過uddi去發現服務。

採用wcf則不然。wcf引入了用通道,它封裝了訊息的通訊細節,例如編碼、事務處理、安全等,然後又通過引入繫結的概念,封裝了通道的組成順序與處理細節。最後,引入了獨有的endpoint元素,整合了位址、繫結和契約之間的「三位一體」,以最簡單的方式定義和發布服務。

每種繫結對應不同的傳輸協議、訊息編碼格式和版本以及安全、可靠性和事務模式。wcf也提供了擴充套件繫結的方式,例如通過custombinding或者定義派生與binding的類。

wcf的契約包括服務契約、資料契約和訊息契約(特別的,還包括了錯誤契約,用於異常的處理)。其中服務契約為面向服務應用程式的核心,通過它可以定義服務。資料契約則為服務所要傳遞的資料。由於服務的呼叫需要跨程序或機器進行通訊,就需要服務資料必須能夠被序列化和反序列化。雖然.net本身提供了資料的序列化功能,但wcf的資料契約更加符合服務資料的定義習慣。至於訊息契約,則可以將服務資料定義為訊息,包括xml文字格式、mtom(訊息傳輸優化機制)格式和二進位制格式。

繫結(binding)、契約(contract)與服務的位址(address)組合在一起,則形成了終結點(endpoint),如下圖所示:

address是endpoint的網路位址,它標記了訊息傳送的目的地。binding描述的是如何傳送訊息,例如訊息傳送的傳輸協議(如tcp,http),安全(如ssl,soap訊息安全)。contract則描述的是訊息所包含的內容,以及訊息的組織和操作方式,例如是單向,雙向還是請求/響應方式。

引入終結點可以說是wcf的乙個偉大創舉,通過它使得我們能夠更加容易的發布和管理服務,尤其是發布和管理多個服務。每個服務必須至少擁有乙個終結點,而客戶端正是通過終結點知道服務的相關資訊,例如位址、訊息編碼格式、傳輸協議以及服務的內容,然後在進行正確的呼叫。最特別的是,同乙個服務可以定義多個終結點,每個終結點可以是不同的位址、不同的繫結方式,以便於滿足多個客戶端的不同需要。而對於服務的發布者而言,我們只需要管理終結點的配置,就可以完成對服務的管理,這也為服務的託管提供了便利。

5、wcf主要包含哪些內容?

juval的《programming wcf services》一書基本已經涵蓋了wcf技術的方方面面。概括來講,主要包括繫結、服務契約、資料契約、訊息傳遞、異常處理、例項模式、併發處理、事務處理、安全以及佇列服務等。

繫結屬於wcf基本的技術要素,是wcf進行通訊處理的基礎。了解繫結的相關知識,有助於開發wcf應用程式。因為在不同的業務需求下,可能對通訊方式、協議、訊息編碼等多個方面會有不同的要求。在配製、發布和執行服務時,都需要對繫結進行操作。因而,我們必須掌握wcf內建繫結的相關屬性,熟悉繫結元素的相關配置。此外,在一些高階應用上,我們還要掌握自定義繫結的方式,了解在自定義繫結時,新增繫結元素的方式與順序,了解binding基類的相關屬性和方法。以及與繫結配置相關的類。

服務契約是wcf的主要處理物件,服務的定義和設定正是通過服務契約實現的。除了了解servicecontract和operationcontract的基礎應用之外,還需要比較wcf服務程式設計與普通的.net程式設計之間的區別,例如服務的繼承與多型是怎樣實現的。最重要的是如何根據soa的思想劃分服務的邊界,確定服務的粒度大小,這需要從系統的易用性、可擴充套件性、效能等多個方面進行權衡。

服務契約中關於操作的定義要受到很多約束,其中最重要的就是對資料的處理,這也是wcf引入資料契約的目的。由於wcf的特殊性,因而我們需要了解一些特殊資料型別的序列化方式,例如泛型型別、集合、dataset等。

約束服務操作定義的還包括對異常的處理,wcf對異常有一套特殊的處理方式,可以根據實際的情況,確定異常訊息是否需要進行通訊,以及出現異常時,是否要求停止服務例項,或繼續維持會話。

wcf為訊息傳遞提供了非常大的靈活性。它提供了專門的message類以及相關的讀寫器,例如xmldictionaryreader和xmldictionarywriter等對訊息進行讀寫,這其中包含了對訊息版本、編碼格式、訊息標頭和正文等的操作。同時,wcf還提供了訊息與方法之間的對映。在提供系統的互操作性時,了解wcf的訊息傳遞方式很有必要。

根據不同的需求,wcf將例項模式分為percall,single和persession三種方式。通過設定服務行為的instancecontextmode屬性,來管理服務例項的生存週期,可以簡化開發人員的工作。我們只需要了解這三種例項模式的特性即可。通常情況下,我建議服務採用percall模式,如果需要維持服務與客戶端之間的會話,則可以採用persession模式。只有在對效能和可伸縮性沒有太大要求的情況下,才可以採用single模式。

關於事務處理、併發處理以及安全,主要都是通過相關的服務行為進行設定和管理。這些內容都是wcf高階應用所必需掌握的內容,尤其對於開發企業級應用系統而言。至於佇列服務,主要是利用了訊息佇列,以實現系統可以離線訪問服務,並保持服務狀態的同步。

6、wcf主用適用於哪些應用場景?

wcf本身就是微軟為了應對soa戰略所推出的一套基於.net framework下的sdk。當我們在windows平台下,基於.net框架開發一套系統,同時要求這套系統需要與其它平台例如weblogic、websphere或者jboss進行互動時,就需要採用wcf技術了。這是因為wcf的互操作性所決定的。

目前來看,wcf在企業應用中還沒有得到大量的應用,但隨著開發者對.net 3.x的深入了解,wcf會逐漸深入人心。由於wcf整合了.net程式設計開發的習慣,對於.net開發人員而言,就大大地降低了學習曲線,此外,wcf保留了對舊有技術包括web service、.net remoting、msmq、wse的支援,同時對於舊有技術到wcf的遷移也提供了非常好的解決方案。因而,如果.net人員若要應用soa的解決方案,那麼wcf無疑就是最佳選擇。單以開發而論,利用wcf定義服務、公開服務以及執行服務,利用wf實現工作流的設計、執行與管理、利用wpf作為具有豐富表現的富客戶端,或者通過ajax+sliverlight開發呼叫wcf服務的客戶端,以及通過cardspace完成對服務安全的設定與管理,就足以實施一整套的soa解決方案。同時,wcf還可以結合biztalk以及sharepoint,使得sdk能夠搭載於應用伺服器之上,更大程度地滿足企業應用的需要。

除了實施soa解決方案之外,wcf對於開發分布式系統而言,也是得天獨厚的。當我們的應用系統需要在多個伺服器上執行不同服務,以支撐大量的訪問負荷、大資料量處理、資料探勘等工作時,就可以利用wcf開發不同的服務,然後託管在不同的伺服器上,此時,整個系統就可以有效地利用伺服器資源,減輕系統負荷。

文章**:

WCF 基礎介紹

1.概念 2.組成 3.契約型別 服務契約 資料契約 訊息契約和錯誤契約 4.wcf技術優勢 常用的分布式技術有com net遠端技術 remoting web service和微軟訊息佇列服務,wcf技術將這些分布式技術集成為乙個高效的api。常用的那些分布式技術只能解決專案開發中某個方面的問題,...

WCF簡單應用

以下是wcf乙個簡單應用案例,記錄如下 1.建立乙個wcf service library的專案demo.service 1.1建立介面檔案 1.1.1介面檔案格式如下 using system.collections.generic using system.servicemodel using ...

wcf的簡單服務建立

這是我第一次在部落格寫作,主要是為了記錄一下自己在工作或者生活中的一些所得,希望能夠用作乙個備忘錄吧。首先,在vs上面建立乙個專案,不用特定的建立wcf專案,直接建立乙個空專案即可,廢話不多說直接上 這個是服務端的入口程式,因為服務比較簡單,不需要手動配置,直接用 的方式新增配置。using sys...