上一次提到,我們的WCF程序宿主是發佈到IIS上面的。雖然這樣做未嘗不可,不過不便於我們進行“開始”或“停止”WCF服務的操作。所以再次嘗試了編寫以窗體應用程序作爲WCF服務宿主的方式,並取得了成功。而下文則記錄整個程序的建立過程。
一、創建WCF服務
首先創建一個WCF服務項目,項目名稱爲WCFService,解決方案爲WCFDemo。
新建的WCF服務項目已經包含了一個GetData()函數,我們這個例子中直接使用這個函數。
二、創建WCF宿主
同樣地,我們爲這個解決方案增加一個WCF服務宿主項目。項目名稱爲WCFServerHost,程序類型爲Windows窗體應用程序。
在程序的窗口上放置一個按鈕,並將按鈕的標題改爲“開啓服務”,修改後的窗口如下:
然後爲程序添加System.ServiceModel和WcfService兩個引用
最後,雙擊程序按鈕添加如下代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
private ServiceHost
Host = null ; private void button1_Click( object sender,
EventArgs e) { if (Host
== null ) { Host
= new ServiceHost( typeof (WCFService.Service1)); //綁定 System.ServiceModel.Channels.Binding
httpBinding = new BasicHttpBinding(); //終結點 if (Host.Description.Behaviors.Find<System.ServiceModel.Description.ServiceMetadataBehavior>()
== null ) { //行爲 ServiceMetadataBehavior
behavior = new ServiceMetadataBehavior(); behavior.HttpGetEnabled
= true ; //元數據地址 Host.Description.Behaviors.Add(behavior); //啓動 Host.Open(); } } } |
然後,在關閉窗口事件中添加如下代碼:
1
2
3
4
5
6
7
|
private void Form1_FormClosed( object sender,
FormClosedEventArgs e) { if (Host
!= null ) { Host.Close(); } } |
好了,現在運行應用程序,開啓服務後,在IE瀏覽器中輸入http://localhost:8002/Service1,檢查是否正常顯示元數據。
三、編寫客戶端程序
在解決方案中再添加一個新的Windows窗體應用程序,程序名稱爲WCFClient。
然後,在關閉窗口事件中添加如下代碼:在程序項目上按右鍵,選擇“添加服務引用……”。在添加服務引用對話框的地址欄位中,輸入:http://localhost:8002/Service1,發現服務後,將服務命名空間改爲ServiceReferenceDemo,然後點擊“確定”按鈕。
添加完服務後,我們在程序窗口上放置一個按鈕,並將按鈕標題命名爲“執行”。雙擊“執行”按鈕,並編寫如下代碼:
1
2
3
4
5
6
7
8
9
|
private void button1_Click( object sender,
EventArgs e) { using (ServiceReferenceDemo.Service1Client
sc = new ServiceReferenceDemo.Service1Client()) { sc.Open(); MessageBox.Show(sc.GetData(10)); sc.Close(); } } |
四、測試執行
首先確保Host程序已經運行、然後執行客戶端程序,並點擊“執行”按鈕,檢查是否有一個正確的返回值。