Windows 服務(先前稱為 Windows NT 服務)提供的程式模型,特別適用於必須存在於長時間執行之可執行檔中的應用程式,而且不會顯示任何形式的使用者介面。 Windows 服務應用程式的處理程式存留期是由服務控制管理員 (SCM) 管理,可讓您啟動、停止和暫停 Windows 服務應用程式。 您可以設定 Windows 服務程式在電腦啟動時自動啟動,使其成為「永遠開啟」應用程式的適當裝載環境。 如需 Windows 服務應用程式的詳細資訊,請參閱 Windows 服務應用程式。
裝載長時間執行 Windows Communication Foundation (WCF) 服務的應用程式會與 Windows 服務共用許多特性。 特別是 WCF 服務是長時間執行的伺服器可執行檔,不會直接與用戶互動,因此不會實作任何形式的使用者介面。 因此,在 Windows 服務應用程式內裝載 WCF 服務是建置強固、長時間執行、WCF 應用程式的一個選項。
WCF 開發人員通常必須決定是否要在 Windows 服務應用程式內或因特網資訊服務 (IIS) 或 Windows 行程啟用服務 (WAS) 裝載環境內裝載其 WCF 應用程式。 您應該考慮在下列情況下使用 Windows 服務應用程式:
您的應用程式需要明確啟用。 例如,當您的應用程式必須在伺服器啟動時自動啟動,而不是動態啟動,以回應第一個傳入訊息時,您應該使用 Windows 服務。
裝載應用程式的程式必須在啟動後繼續執行。 啟動之後,除非伺服器管理員使用服務控制管理員明確關閉,否則 Windows 服務進程會繼續執行。 裝載於 IIS 或 WAS 的應用程式可能會以動態方式啟動和停止,以充分利用系統資源。 需要明確控制其裝載進程存留期的應用程式應該使用 Windows 服務,而不是 IIS 或 WAS。
您的 WCF 服務必須在 Windows Server 2003 上執行,並使用 HTTP 以外的傳輸。 在 Windows Server 2003 上,IIS 6.0 裝載環境僅限於 HTTP 通訊。 Windows 服務應用程式不受此限制,而且可以使用任何傳輸 WCF 支援,包括 net.tcp、net.pipe 和 net.msmq。
操作說明
建立 Windows 服務應用程式。 您可以在由命名空間 System.ServiceProcess 提供的類別中,使用受管理的程式碼撰寫 Windows 服務應用程式。 這個應用程式必須包含繼承自 ServiceBase的類別。
將 WCF 服務的存留期連結至 Windows 服務應用程式的存留期。 一般而言,您希望裝載於 Windows 服務應用程式中的 WCF 服務在裝載服務啟動時變成作用中、停止在裝載服務停止時接聽訊息,並在 WCF 服務發生錯誤時關閉裝載進程。 這可以這樣達成:
覆寫 OnStart(String[]) 以開啟一或多個 ServiceHost 實例。 單一 Windows 服務應用程式可以裝載多個 WCF 服務,以群組的形式啟動和停止。
覆寫 OnStop 以在 Closed 期間啟動的任何執行 WCF 服務上呼叫 ServiceHost。
訂閱 Faulted 的 ServiceHost 事件,並在發生錯誤時使用 ServiceController 類來關閉 Windows 服務應用程式。
裝載 WCF 服務的 Windows 服務應用程式會部署和管理的方式,與不使用 WCF 的 Windows 服務應用程式相同。