建立第一個簡單WCF服務
步驟一:構建整個解決方案
通過VS 2008建立一個空白的解決方案,新增如下四個專案。專案的型別、承載的功能和相互引用關係如下,整個專案在VS下的結構如圖2 所示。
- Contracts : 一個類庫專案,定義服務契約(Service Contract),引用System.ServiceMode程式集(WCF框架的絕大部分實現和API定義在該程式集中);
- Services : 一個類庫專案,提供對WCF服務的實現。定義在該專案中的所有WCF服務實現了定義在Contracts中相應的服務契約,所以Services具有對Contracts專案的引用;
- Hosting : 一個控制檯(Console)應用,實現對定義在Services專案中的服務的寄宿,該專案須要同時引用Contracts和Services兩個專案和System.ServiceMode程式集;
- Client : 一個控制檯應用模擬服務的客戶端,該專案引用System.ServiceMode程式集。
步驟二:建立服務契約
WCF採用基於契約的互動方式實現了服務的自治,以及客戶端和服務端之間的鬆耦合。WCF包含四種類型的契約:服務契約、資料契約、訊息契約和錯誤契約,這裡著重於服務契約。從功能上講,服務契約抽象了服務提供的所有操作;而站在訊息交換的角度來看,服務契約則定義了基於服務呼叫的訊息交換過程中,請求訊息和回覆訊息的結構,以及採用的訊息交換模式。第4章將提供對服務契約的詳細介紹。
一般地,我們通過介面的形式定義服務契約。通過下面的程式碼,將一個介面ICalculator定義成服務契約。WCF廣泛採用基於自定義特性(Custom
Attribtue)的宣告式程式設計模式,我們通過在介面上應用
通過應用ServiceContractAttribute特性將介面定義成服務契約之後,介面的方法成員並不能自動成為服務的操作。在此方面,WCF採用的是顯式選擇(Explicit Opt-in)的策略:我們須要在相應的操作方法上面顯式地應用OperationContractAttribute特性。
接下來定義介面 實現 加 減 乘 除
步驟三:建立服務
當服務契約成功建立時,我們需要通過實現服務契約來建立具體的WCF服務。WCF服務CalculatorService定義在Services專案中,實現了服務契約介面ICalculator,實現了所有的服務操作。CalculatorService定義如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Services
{
//第一步 建立契約服務
//建立服務 實現契約的ICalulator介面中的方法
public class CalculatorService:Contracts.ICalculator
{
#region ICalculator Members 實現ICalculator介面 建立服務
public double Add(double X, double Y)
{
return X + Y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Divide(double x, double y)
{
return x / y;
}
#endregion
}
}
步驟四:通過自我寄宿的方式寄宿服務
WCF服務需要依存一個執行著的程序(宿主),服務寄宿就是為服務指定一個宿主的過程。WCF是一個基於訊息的通訊框架,採用基於終結點(Endpoint)的通訊手段。終結點由地址(Address)、繫結(Binding)和契約(Contract)三要素組成,如圖3 所示。由於三要素應為首字母分別為ABC,所以就有了易於記憶的公式:Endpoint = ABC。一個終結包含了實現通訊所必需的所有資訊,我們可以這樣認識終結點的ABC:
- 地址( Address ): 地址決定了服務的位置,解決了服務定址的問題,《WCF技術剖析(卷1) 》第2章提供了對地址和定址機制的詳細介紹;
- 繫結( Binding ): 繫結實現了通訊的所有細節,包括網路傳輸、訊息編碼,以及其他為實現某種功能(比如安全、可靠傳輸、事務等)對訊息進行的相應處理。WCF中具有一系列的系統定義繫結,比如BasicHttpBinding、WsHttpBinding、NetTcpBinding等,《WCF技術剖析(卷1) 》第3章提供對繫結的詳細介紹;
- 契約( Contract ): 契約是對服務操作的抽象,也是對訊息交換模式以及訊息結構的定義。《WCF技術剖析(卷1) 》第4章提供對服務契約的詳細介紹
在進行真正的WCF應用開發時,一般不會直接通過編碼的方式進行終結點的新增和服務行為的定義,而是通過配置的方式進行。上面新增終結點和定義服務行為的程式碼可以用下面的配置代替:
原文出自:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html