在 Windows 服務應用程式中裝載
Windows 服務 (之前稱為 Windows NT 服務) 所提供的處理序模型特別適合那些必須駐留在長時間執行的可執行檔中,且不會顯示任何使用者介面形式的應用程式使用。 Windows 服務應用程式的處理序存留期是由服務控制管理員 (SCM) 負責管理,可讓您啟動、停止與暫停 Windows 服務應用程式。 您可以設定在電腦啟動時讓 Windows 服務處理序自動啟動,使其成為適合裝載「一律開啟」應用程式的環境。 如需 Windows 服務應用程式的詳細資訊,請參閱 Windows 服務應用程式。
裝載長時間執行 Windows Communication Foundation (WCF) 服務的應用程式會與 Windows 服務共用許多特性。 值得一提的是,WCF 服務為長時間執行的伺服器可執行檔,其不會直接與使用者互動,因此不會實作任何形式的使用者介面。 也因此,建置穩固且長時間執行的 WCF 應用程式時,可以選擇將 WCF 服務裝載至 Windows 服務應用程式中。
WCF 開發人員經常必須決定是否將其 WCF 應用程式裝載至 Windows 服務應用程式中,或是 Internet Information Services (IIS) 或 Windows 處理序啟用服務 (WAS) 裝載環境中。 在下列情況中,您應該考慮使用 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 命名空間中的類別,以 Managed 程式碼來撰寫 Windows 服務應用程式。 此應用程式必須包含一個繼承自 ServiceBase 的類別。
將 WCF 服務的存留期連結至 Windows 服務應用程式的存留期。 一般來說,您會希望裝載於 Windows 服務應用程式中的 WCF 服務能夠在裝載服務啟動時變成作用中、當裝載服務停止時隨之停止接聽訊息,且在 WCF 服務遭遇錯誤時關閉裝載處理序。 執行下列工作即可達成這點:
覆寫 OnStart(String[]) 以開啟一或多個 ServiceHost 執行個體。 單一 Windows 服務應用程式可以裝載多個以群組為單位啟動並停止的 WCF 服務。
覆寫 OnStop 以呼叫 Closed (位於任何執行中 WCF 服務的 ServiceHost,而這些服務都是在執行 OnStart(String[]) 期間所啟動)。
訂閱 Faulted 的 ServiceHost 事件,並在發生錯誤時,使用 ServiceController 類別來關閉 Windows 服務應用程式。
負責裝載 WCF 服務的 Windows 服務應用程式,其部署與管理方式將與不使用 WCF 的 Windows 服務應用程式相同。