天天看點

C# WCF 完整執行個體,winform 窗體作為 宿主

參考網址: https://www.cnblogs.com/pangguoming/p/7495090.html

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

一、建立WCF服務

首先建立一個WCF服務項目,項目名稱為WCFService,解決方案為WCFDemo。

C# WCF 完整執行個體,winform 窗體作為 宿主

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

二、建立WCF宿主

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

C# WCF 完整執行個體,winform 窗體作為 宿主
在程式的視窗上放置一個按鈕,并将按鈕的标題改為“開啟服務”,修改後的視窗如下:
C# WCF 完整執行個體,winform 窗體作為 宿主
然後為程式添加System.ServiceModel和WcfService兩個引用
C# WCF 完整執行個體,winform 窗體作為 宿主
最後,輕按兩下程式按鈕添加如下代碼:

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();

}

}

}

然後,在關閉視窗事件中添加如下代碼:

private

void

Form1_FormClosed(

object

sender, FormClosedEventArgs e)

{

if

(Host !=

null

)

{

Host.Close();

}

}

好了,現在運作應用程式,開啟服務後,在IE浏覽器中輸入http://localhost:8002/Service1,檢查是否正常顯示中繼資料。

三、編寫用戶端程式

在解決方案中再添加一個新的Windows窗體應用程式,程式名稱為WCFClient。

C# WCF 完整執行個體,winform 窗體作為 宿主

然後,在關閉視窗事件中添加如下代碼:在程式項目上按右鍵,選擇“添加服務引用……”。在添加服務引用對話框的位址欄位中,輸入:http://localhost:8002/Service1,發現服務後,将服務命名空間改為ServiceReferenceDemo,然後點選“确定”按鈕。

C# WCF 完整執行個體,winform 窗體作為 宿主

添加完服務後,我們在程式視窗上放置一個按鈕,并将按鈕标題命名為“執行”。輕按兩下“執行”按鈕,并編寫如下代碼:

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程式已經運作、然後執行用戶端程式,并點選“執行”按鈕,檢查是否有一個正确的傳回值。