WCF 是甚麼?
WCF是一種開發工具,用來在微軟系統上開發(Develop)及部屬(Deploy)服務(Service)。
WCF可以被視為一個更好的.NET,讓你可以提供CLR(Common Language Runtime)(註1)的服務,或是使用其他CLR的服務
WCF目前包裝在.NET 4.5版本裡,所以只有Windows XP之後的作業系統能夠支援。
大部分的WCF功能都包含在一個叫做
System.ServiceModel.dll
裡,開發時必須將其加入參考才能使用WCF的功能什麼是服務 Service ?
服務是提供給外界使用的一個功能。
用戶端 Client Side: 使用服務的人
服務端 Server Side: 提供服務的人
WCF的訊息都是基於SOAP,且並不依賴於單一的通訊協定。不像Web Service,WCF的服務可以使用HTTP以外的通訊協定。(例如TCP)
在WCF裡,每個服務都有一個唯一的位置。位置提供了兩個重要的資訊:
- 服務所在的位置
- 通訊協定
契約 Contracts
1. Service Contracts 服務契約
說明服務提供了哪些方法給用戶端使用。
2. Data Contracts 資料契約
定義出服務使用的資料型態。可以是基本資料型態像是`int`或是`string`,也可以是自定義的型別。
3. Fault Contracts 錯誤契約
定義如果服務出現例外狀況要如何傳送資訊給用戶端。
4. Message Contracts 訊息契約
讓服務端可以直接跟訊息溝通,不是WCF常見的作法,在這邊不贅述。
服務契約範例:
注意:
- 實作服務的類別不允許使用有帶參數的建構子,因為WCF只會使用預設的建構子。
- 雖然類別可以使用索引子(indexer)或是靜態成員(static member)等內部屬性,但是WCF的用戶端是無法使用到這些屬性的。
- 還有盡量不要在實作服務的類別上直接使用
[ServiceContract]
,拆開來才可以讓不同類別實作同一個服務契約,增加擴充性。
名稱及命名空間 Names And Namespaces
我們可以為契約定義一個命名空間,使用
Namespace
的屬性,例如:[
ServiceContract
(Namespace = "MyNamespace")]
interface
IMyContract
{...}
如果沒有給予命名空間的話預設會是 http://tempuri.org。如果是面向大眾的服務也可以使用公司的URL或是應用程式名稱。
名稱的預設會是介面的名稱,不過也可以用
Name
屬性來定義另外一個名稱,這名稱將會顯示在Metadata
中, 例如: