使用一個窗體應用程序作爲WCF服務的宿主

上一次提到,我們的WCF程序宿主是發佈到IIS上面的。雖然這樣做未嘗不可,不過不便於我們進行“開始”或“停止”WCF服務的操作。所以再次嘗試了編寫以窗體應用程序作爲WCF服務宿主的方式,並取得了成功。而下文則記錄整個程序的建立過程。

 

一、創建WCF服務

 

首先創建一個WCF服務項目,項目名稱爲WCFService,解決方案爲WCFDemo


新建的WCF服務項目已經包含了一個GetData()函數,我們這個例子中直接使用這個函數。


二、創建WCF宿主

 

同樣地,我們爲這個解決方案增加一個WCF服務宿主項目。項目名稱爲WCFServerHost,程序類型爲Windows窗體應用程序。



在程序的窗口上放置一個按鈕,並將按鈕的標題改爲“開啓服務”,修改後的窗口如下:

 


 

然後爲程序添加System.ServiceModelWcfService兩個引用



 

最後,雙擊程序按鈕添加如下代碼:

 

?
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();
        //終結點
        Host.AddServiceEndpoint(typeof(WCFService.IService1), httpBinding, "http://localhost:8002/");
        if (Host.Description.Behaviors.Find<System.ServiceModel.Description.ServiceMetadataBehavior>() == null)
        {
            //行爲
            ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
            behavior.HttpGetEnabled = true;
 
            //元數據地址
            behavior.HttpGetUrl = new Uri("http://localhost:8002/Service1");
            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程序已經運行、然後執行客戶端程序,並點擊“執行”按鈕,檢查是否有一個正確的返回值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章