HOW TO:在 Managed Windows 服務中裝載 WCF 服務

本主題概要說明建立可由 Windows 服務裝載的 Windows Communication Foundation (WCF) 服務時,必要的基本步驟。此案例是由 Managed Windows 服務裝載選項所啟用,就是在非訊息啟動的安全環境中由網際網路資訊服務 (IIS) 外部所裝載的長期執行之 WCF 服務。服務的存留期會改由作業系統來控制。所有 Windows 版本都提供這個裝載選項。

Windows 服務可以透過 Microsoft Management Console (MMC) 中的 Microsoft.ManagementConsole.SnapIn 嵌入式管理單元進行管理,並設定成系統啟動時自動啟動。這個裝載選項包含可將 WCF 服務裝載為 Managed Windows 服務的註冊應用程式定義域 (AppDomain),如此一來便可透過 Windows 服務的服務控制管理員 (SCM) 來控制服務的處理序存留期。

服務程式碼包含服務合約的服務實作、Windows 服務類別以及安裝程式類別。服務實作類別 CalculatorService 是一項 WCF 服務。CalculatorWindowsService 是一項 Windows 服務。為了限定為 Windows 服務,此類別會繼承自 ServiceBase,並且實作 OnStartOnStop 方法。在 OnStart 中,會為 CalculatorService 型別建立並開啟 ServiceHost。使用 OnStop 時,則會停止與處置服務。主機也會負責提供服務主機的基底位址,該位址必須設定在應用程式設定中。繼承自 Installer 的安裝程式類別,會允許 Installutil.exe 工具將程式當做 Windows 服務進行安裝。

建構服務並提供裝載程式碼

  1. 使用 Service.cs 檔案中的計算機服務介面,定義 ICalculator 服務合約。

  2. 將 Service.cs 檔案中 CalculatorService 類別的服務合約實作為 WCF 服務,方法是讓它繼承 WCF ICalculator 介面。

  3. 實作 Windows 服務,方法是讓它繼承 ServiceBase 類別。覆寫 OnStart 方法,以建立並開啟 ServiceHost 的執行個體。覆寫 OnStop 方法以關閉 ServiceHost 的執行個體。建立 CalculatorService 執行個體的執行個體,並將其命名為 "WCFWindowsServiceSample"。為應用程式提供進入點。

  4. 建立繼承自 Installer,而且以設為 trueRunInstallerAttribute 加以標示的 ProjectInstaller 的類別,以便在安裝組件後叫用 Visual Studio 的 Custom Action Installer 或 Installutil.exe。

  5. 在組態中提供服務的基底位址。

安裝並執行服務

  1. 編譯服務以建置 Service.exe 可執行檔。

  2. 在命令提示字元中輸入 installutil bin\service.exe 以安裝 Windows 服務 (如果尚未設定好 Microsoft.NET Framework 的路徑的話,則該工具位於 Microsoft.NET Framework 的安裝目錄)。在命令提示字元中輸入 services.msc 以存取服務控制管理員 (SCM)。WINDOWS 服務應該會在 [服務] 中顯示為 "WCFWindowsServiceSample"。只有在執行 WINDOWS 服務的情況下,WCF 服務才會回應用戶端。若要啟動服務,請以滑鼠右鍵按一下 SCM 中的服務並選取 [啟動],或是在命令提示字元中輸入 net start WCFWindowsServiceSample

  3. 若要變更服務,必須先加以停止並解除安裝。若要停止服務,請以滑鼠右鍵按一下 SCM 中的服務並選取 [停止],或是在命令提示字元中輸入 net stop WCFWindowsServiceSample。請注意,如果您在停止 WINDOWS 服務後執行用戶端,則當用戶端嘗試存取此服務時將會發生 EndpointNotFoundException 例外狀況。若要解除安裝 WINDOWS 服務,請在命令提示字元中輸入 installutil /u bin\service.exe

範例

下列程式碼顯示包含合約的 Service.cs 檔案內容、它的實作以及 WINDOWS 服務安裝與裝載程式碼。

就像「自我裝載」選項一樣,Windows 服務裝載環境要求將某些裝載程式碼撰寫成應用程式的一部分。服務會實作為 .exe 程式並包含專屬的裝載程式碼。在其他裝載環境中,例如網際網路資訊服務 (IIS) 所裝載的 Windows Process Activation Service (WAS),開發人員就不需要撰寫裝載程式碼。

請參閱

概念

在 Managed 應用程式中裝載
裝載服務