Hospedagem em um aplicativo de serviço do Windows
Os serviços do Windows (anteriormente conhecidos como serviços do Windows NT) fornecem um modelo de processo particularmente adequado para aplicativos que devem viver em um executável de longa execução e não exibem nenhuma forma de interface do usuário. O tempo de vida do processo de um aplicativo de serviço do Windows é gerenciado pelo gerenciador de controle de serviço (SCM), que permite iniciar, parar e pausar aplicativos de serviço do Windows. Você pode configurar um processo de serviço do Windows para iniciar automaticamente quando o computador é iniciado, tornando-o um ambiente de hospedagem adequado para aplicativos "sempre ligados". Para obter mais informações sobre aplicativos de serviço do Windows, consulte Aplicativos de serviço do Windows.
Os aplicativos que hospedam serviços WCF (Windows Communication Foundation) de longa execução compartilham muitas características com os serviços do Windows. Em particular, os serviços WCF são executáveis de servidor de longa execução que não interagem diretamente com o usuário e, portanto, não implementam nenhuma forma de interface do usuário. Como tal, hospedar serviços WCF dentro de um aplicativo de serviço do Windows é uma opção para criar aplicativos WCF robustos e de longa execução.
Muitas vezes, os desenvolvedores do WCF devem decidir se hospedam seu aplicativo WCF dentro de um aplicativo de serviço do Windows ou dentro do ambiente de hospedagem dos Serviços de Informações da Internet (IIS) ou do Serviço de Ativação de Processos do Windows (WAS). Você deve considerar o uso de aplicativos de serviço do Windows nas seguintes condições:
Seu aplicativo requer ativação explícita. Por exemplo, você deve usar os serviços do Windows quando seu aplicativo deve ser iniciado automaticamente quando o servidor é iniciado, em vez de ser iniciado dinamicamente em resposta à primeira mensagem de entrada.
O processo que hospeda seu aplicativo deve permanecer em execução depois de iniciado. Uma vez iniciado, um processo de serviço do Windows permanece em execução, a menos que seja explicitamente desligado por um administrador de servidor usando o gerenciador de controle de serviço. Os aplicativos hospedados no IIS ou WAS podem ser iniciados e interrompidos dinamicamente para otimizar o uso dos recursos do sistema. Os aplicativos que exigem controle explícito sobre o tempo de vida de seu processo de hospedagem devem usar serviços do Windows em vez de IIS ou WAS.
Seu serviço WCF deve ser executado no Windows Server 2003 e usar transportes diferentes de HTTP. No Windows Server 2003, o ambiente de hospedagem do IIS 6.0 é restrito apenas à comunicação HTTP. Os aplicativos de serviço do Windows não estão sujeitos a essa restrição e podem usar qualquer suporte WCF de transporte, incluindo net.tcp, net.pipe e net.msmq.
Procedimentos
Crie um aplicativo de serviço do Windows. Você pode escrever aplicativos de serviço do Windows em código gerenciado usando as classes no System.ServiceProcess namespace. Este aplicativo deve incluir uma classe que herda de ServiceBase.
Vincule o tempo de vida dos serviços WCF ao tempo de vida do aplicativo de serviço do Windows. Normalmente, você deseja que os serviços WCF hospedados em um aplicativo de serviço do Windows se tornem ativos quando o serviço de hospedagem for iniciado, pare de ouvir mensagens quando o serviço de hospedagem for interrompido e encerre o processo de hospedagem quando o serviço WCF encontrar um erro. Isso pode ser feito da seguinte maneira:
Substituir OnStart(String[]) para abrir uma ou mais instâncias do ServiceHost. Um único aplicativo de serviço do Windows pode hospedar vários serviços WCF que iniciam e param como um grupo.
Substitua OnStop para chamar Closed os serviços WCF em execução que foram iniciados durante OnStart(String[])o ServiceHost .
Inscreva-se no Faulted evento de ServiceHost e use a ServiceController classe para desligar o aplicativo de serviço do Windows em caso de erro.
Os aplicativos de serviço do Windows que hospedam serviços WCF são implantados e gerenciados da mesma maneira que os aplicativos de serviço do Windows que não usam WCF.