自託管不要求一個Windows服務。如果您願意,您可以在控制檯應用程序內自行託管。只是如果您需要全天候訪問,但不希望出於任何原因使用IIS,則Windows服務是自託管的一個很好的解決方案。
管理主機進程的生命週期並不是什麼大事。我使用Windows服務來託管WCF服務。我只是在OnStart()
回調我的Windows服務的啓動我的WCF服務,像這樣:
private ServiceHost _host;
protected override void OnStart(string[] args)
{
_host = new ServiceHost(typeof(CalculatorService));
_host.Open();
}
同樣,我關閉了OnStop()
回調我的Windows服務的WCF服務:
protected override void OnStop()
{
if (_host != null) _host.Close();
}
這有效將WCF服務的生命週期與Windows服務的生命週期綁定在一起。您可以在任何類型的應用程序(控制檯,Windows窗體應用程序等)中執行類似操作。例如,在Windows Forms應用程序的OnLoad()
回調中,啓動ServiceHost
作爲WCF服務,並在退出應用程序時關閉它。夠簡單。
WCF爲如何處理傳入請求提供了很大的靈活性。例如,您可以使您的WCF服務成爲單例,這意味着您將擁有一個且只有一個WCF服務實例。在這種情況下,所有傳入的請求都由這一個實例處理。但是你也可以讓你的WCF服務用你的WCF服務的一個新實例來處理每個傳入的請求。這可以讓您的服務更好地擴展,但可能需要您同步對後端數據存儲的任何訪問權限,例如數據庫。您可以使用WCF服務上的ServiceBehaviorAttribute
的InstanceContextMode
屬性來控制此行爲。
當我再次閱讀你的問題時,聽起來你只是在學習WCF,所以我希望這些都不會讓你不知所措。查看我對this SO question的回答,查看可能對您有幫助的一些鏈接。