C# WCF 完整實例,winform 窗體作為 宿主


上一次提到,我們的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();
         //終結點
         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程序已經運行、然后執行客戶端程序,並點擊“執行”按鈕,檢查是否有一個正確的返回值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM