Самостоятельный хостинг не требует службы Windows. Вы можете самостоятельно размещаться в консольном приложении, если хотите. Просто службы Windows являются хорошим решением для самостоятельного размещения, если вам требуется круглосуточный доступ, но вы не хотите по какой-либо причине использовать IIS.
Управление жизненным циклом хост-процесса не имеет большого значения. Я использую службу Windows для размещения службы WCF. Я просто запускаю свою службу WCF в OnStart()
обратном вызове моей службы Windows, например:
private ServiceHost _host;
protected override void OnStart(string[] args)
{
_host = new ServiceHost(typeof(CalculatorService));
_host.Open();
}
Аналогично, я закрываю службу WCF в OnStop()
обратном вызове моей службы Windows:
protected override void OnStop()
{
if (_host != null) _host.Close();
}
Это эффективно связывает жизненный цикл службы WCF с жизненным циклом службы Windows. Вы можете сделать что-то подобное в любом приложении - консоли, приложении Windows Forms и т. Д. Например, в обратном вызове OnLoad()
вашего приложения Windows Forms запустите ServiceHost
для службы WCF и закройте его при выходе из приложения. , Достаточно просто.
WCF дает вам большую гибкость в обработке входящих запросов. Например, вы можете сделать свою службу WCF одноэлементной, что означает, что у вас будет один и только один экземпляр вашей службы WCF. В этом случае все входящие запросы обрабатываются одним экземпляром. Но вы также можете настроить службу WCF на каждый входящий запрос с новым экземпляром службы WCF. Это позволяет вашему сервису лучше масштабироваться, но, вероятно, потребует от вас синхронизации любого доступа к вашему внутреннему хранилищу данных, например, к базе данных. Вы можете контролировать это поведение, используя InstanceContextMode
свойство ServiceBehaviorAttribute
в службе WCF.
Когда я читаю ваш вопрос еще раз, кажется, что вы только изучаете WCF, поэтому я надеюсь, что ничего из этого не ошеломило вас. Посмотрите мой ответ на этот вопрос , чтобы найти ссылки, которые могут оказаться вам полезными.