[C#.NET][WCF] 一隻簡單的 Console Application Self-Host

  • 13243
  • 0
  • WCF
  • 2013-10-24

[C#.NET][WCF] 一隻簡單的 Console Application Self-Host

[WCF] 第一隻簡單的 IIS Host 上篇提到WCF可裝載於 Windows 的應用程式,不必依賴IIS,以下將實作如何建立 Host 載體

 

@WcfServiceLibrary 專案:

先建立WCF Service專案,名為 WcfServiceLibrary 。
SNAGHTMLe53ae24

 

@WcfServiceLibrary 專案:

把合約規範都定義好。

SNAGHTMLe76462f

 

 

@WcfServiceHost專案:

接下來呢,我需要一個Windows Console專案,用來當WCF的載體,我將它命名為 WcfServiceHost。

SNAGHTMLe76dd5f

 

@在 WcfServiceHost 專案:

加入 WcfServiceLibrary 專案參考。

SNAGHTMLe7797b8

 

@在 WcfServiceHost 專案:

加入 System.ServiceModel參考。

 

SNAGHTMLe7806fe

 

把WcfServiceLibrary專案裡的App.Config,拖拉到WcfServiceHost專案裡。

SNAGHTMLe7930fa

 

 

@在 WcfServiceHost 專案:

使用 ServiceHost.Open方法,將 WCF 掛載起來。

SNAGHTMLe89deb6

 

@在 WcfServiceClient 專案:

再來,新增一個桌面應用程式專案,我將它命名為WcfServiceClient

SNAGHTMLe8a0681

 

@App.Config:

Host服務的位置,我在這裡是用預設的位置,只要埠號沒被其他程式佔用即可。

SNAGHTMLe8b5b07

 

@WcfServiceClient專案:

將 WcfServiceHost 加入參考,此時就會看到Windows會將Wcf Host掛載起來

SNAGHTMLe8fd93a

SNAGHTMLe8e2b21

@WcfServiceClient專案裡,UI設計如下

SNAGHTMLe917210

 

@WcfServiceClient專案裡,當加入WcfServiceHost後,我們就可以使用WcfServiceHost的Proxy類別了。

SNAGHTMLe961688

 

PS.若無法加入Host 參考,表示Host沒有執行


@WcfServiceClient專案:

設定為啟動專案,按下F5執行程式,便可看到以下畫面。

SNAGHTMLe9888f9

 

PS.裝載程式要比Clien程式還要早執行。


最終,WcfServiceLibrary不需要有App.Config,我們必須確保Console Application有掛載WCF。

1.將WcfServiceLibrary專案的App.Conifg刪掉

2.將方案設為多專案啟動(Host要比Client還要早執行)

SNAGHTMLeaacecf

 

按下F5就可以看到以下。

SNAGHTMLeac42e6

 

把握住兩個原則

  1. WCF Service不能獨立運行,必須要有載體。
  2. 載體要比Client應用程式還要早執行。

 

若想要改變Host的位置

當App.Config修改完畢後

SNAGHTMLed12baf

 

位置變更後手動執行Host

SNAGHTMLed2bc2b

 

別忘了更新Client的參考位置

SNAGHTMLed39b52

 

修改新位置

SNAGHTMLed37b73

 


範例下載:

WCFHost_Demo.zip

補充:專案必須以系統管理員身份執行,否則會跳出例外

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo