開發 WCF 應用程式基本上有三項工作:
以下是一個極簡單的 WCF 應用程式入門練習,使用 Visual Studio 2008,C# 語言。做此練習時,至少須具備 HTTP 的基本觀念,並熟悉 IIS 管理員的操作(例如:建立 IIS 虛擬目錄)。此外,最好是以系統管理員的身分登入 Windows,以免因權限不足而發生一些怪問題。
到此步驟就完成服務介面的定義了。接著要依照此介面來實作服務:
若不幸看到的是:
那表示你可能不是照前面的步驟建立新網站,而是在原先的 IIS 預設網站上建立虛擬目錄,而且原先的預設網站並沒有設定 .svc 資源的處理方式。此時請開啟 IIS 管理員,在網站上點右鍵 > 內容 > 主目錄頁籤 > 設定 > 對應頁籤,看看「應用程式副檔名」清單中是否有 .svc。若沒有,就按「新增」,然後在新開啟的對話窗中:
ASR 在背後其實是使用 svcutil.exe,因此你也可以自己手動產生 proxy class 和組態檔。作法是開啟「Visual Studio 2008 Command Prompt」視窗,輸入以下命令:
svcutil.exe http://locahost:8000/HelloWcf.HelloService.svc
- 撰寫 WCF 服務,這包括定義服務介面,以及撰寫實作服務介面的類別。
- 部署 WCF 服務。
- 撰寫 WCF 用戶端程式。
以下是一個極簡單的 WCF 應用程式入門練習,使用 Visual Studio 2008,C# 語言。做此練習時,至少須具備 HTTP 的基本觀念,並熟悉 IIS 管理員的操作(例如:建立 IIS 虛擬目錄)。此外,最好是以系統管理員的身分登入 Windows,以免因權限不足而發生一些怪問題。
Part I. 撰寫 WCF 服務
首先要建立一個 WCF 服務的專案,然後定義此服務的界面。步驟如下:- New 一個新專案,專案範本選擇 C# > WCF > WCF Service Library。Name 欄位輸入 HelloWcf,按 OK。參考下圖:
此專案範本會幫你加入三個檔案:IService1.cs、Service1.cs、和 App.config。 - 在 Solution Explorer 中找到 Service1.cs,在檔名上點右鍵,選 Rename,將檔案名稱改為 "HelloService.cs"。此修改檔名的動作除了會一併修改類別名稱,連 App.config 裡面對應的設定也會自動幫你改好。如果你是直接去改檔案中的介面名稱,要記得一併修改 App.config 中對應的設定:service 元素的 name 屬性。
- 用同樣的方法把 IService1.cs 改名為 IHelloService.cs。此動作會一併修改 App.config 中的 server 元素底下的 endpoint 子元素的 contract 屬性。
- 儲存整個專案。在儲存對話窗中,Solution 和 Project 名稱皆指定為 HelloWcf,並勾選 "Create directory for solution" 核取方塊。
- 編輯 IHelloService.cs,你會看到裡面已經有一個 IHelloService 介面和一個 CompositeType 類別。注意 IHelloService 有套用 ServiceContract attribute,表示它是定義服務合約的介面,你要提供給用戶端呼叫的操作就是在此定義。CompositeType 類別是套用 DataContract attribute,表示它是用來定義呼叫操作時所需傳遞的資料型別。IHelloService 介面中已經有兩個方法:GetData 和 GetDataUsingDataContract,先不管它們,我們要定義一個 Hello 方法,程式碼如下:
[OperationContract] string Hello(string name);
只要有標示 OperationContract attribute 的方法,就表示可供 WCF 用戶端呼叫;相反地,若無標示此 attribute,就是僅供 WCF 服務自己使用。
到此步驟就完成服務介面的定義了。接著要依照此介面來實作服務:
- 編輯 HelloService.cs,先確定它的宣告是否有實作 IHelloService 介面,然後在類別中加入以下程式碼:
public string Hello(string name) { return "Hello, " + name; }
- Build 專案。
VS2008 的 WCF 專案模板所幫你產生的類別與介面不必是一對一,亦即你可以定義多個服務介面,然後用一個類別來實作多個介面。
Part II. 部署 WCF 服務
WCF 服務必須運行於 host process 中,這個 host process 可以是 IIS 、WAS、Windows 服務、或你自己開發的 .NET 應用程式(即所謂的 self-hosting)。運行於 IIS 和 WAS 環境都可享有生命週期控制的優點,這裡要示範的是將剛才建立的 WCF 服務部署到 IIS。- 利用 IIS 管理員建立一個網站,將此網站使用的連接埠設定為 8000,實體路徑指向一個新建立的空資料夾,例如:D:\Web\WCF。身分驗證的選項請將「啟用匿名存取」打勾。
- 回到 VS2008,在 Solution Explorer 中的專案名稱上點右鍵,選 Publish,目標路徑輸入:http://localhost:8000/,然後按「Publish」鈕。參考下圖:
- HelloWcf.HelloService.svc
- Web.config
- bin 資料夾
若不幸看到的是:
那表示你可能不是照前面的步驟建立新網站,而是在原先的 IIS 預設網站上建立虛擬目錄,而且原先的預設網站並沒有設定 .svc 資源的處理方式。此時請開啟 IIS 管理員,在網站上點右鍵 > 內容 > 主目錄頁籤 > 設定 > 對應頁籤,看看「應用程式副檔名」清單中是否有 .svc。若沒有,就按「新增」,然後在新開啟的對話窗中:
- 「執行檔」輸入 「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll」
- 「副檔名」輸入「.svc」
- 「指令動詞」指定為「GET,HEAD,POST,DEBUG」
如果是 IIS 7,在用瀏覽器測試 .svc 網址時可能會看到「HTTP 錯誤 404.3 - Not found」,此時可以試試以下命令:
C:\Windows\Microsoft.NET\Framewrok\v3.0\Windows Communication Foundation\ServiceModelReg.exe –i
此命令會向 IIS 註冊 WCF 服務,並更新指令碼對應(scriptmap)。
Part III. 撰寫 WCF 用戶端程式
確認 WCF 服務已成功部署於 IIS 之後,接著寫一個簡單的用戶端程式來測試 WCF 服務。步驟如下:- 在同一個 Solution 中加入一個新的 Console 應用程式專案,專案命名為 HelloWcfClient,並將它設定為起始專案(Set as StartUp Project)。
- 在 Solution Explorer 中的 HelloWcfClient 專案名稱上點右鍵 > Add Server Reference。
- 在「Add Server Reference」對話窗中,Address 欄位輸入「http://localhost:8000/HelloWcf.HelloService.svc」,再按「Go」,應會看到如下圖的結果。接著在 Namespace 欄位中輸入「HelloService」,按「OK」。
- 編輯 Program.cs,程式碼如下:
1: using System;
2:
3: namespace HellWcfClient
4: {
5: class Program
6: {
7: static void Main(string[] args)
8: {
9: HelloService.HelloServiceClient client;
10: using (client = new HelloService.HelloServiceClient())
11: {
12: string s = client.Hello("Michael");
13: Console.WriteLine(s);
14: }
15: }
16: }
17: }
- 按 Ctrl+F5 執行看看,應該能看到畫面上輸出「Hello, Michael」。
ASR 在背後其實是使用 svcutil.exe,因此你也可以自己手動產生 proxy class 和組態檔。作法是開啟「Visual Studio 2008 Command Prompt」視窗,輸入以下命令:
svcutil.exe http://locahost:8000/HelloWcf.HelloService.svc
沒有留言: