Para hostear un servicio WCF existen 2 posibilidades, como servicio de windows o bajo IIS. La 2da opción es bastante limitada por lo cual no estamos usando por ahora esa.
Para crear un servicio windows debemos tener un proyecto del tipo Windows Service.
Una vez creado veremos 2 clases, la Program y la de servicio. Como ejemplo a la clase de servicio la voy a llamar Service1.
ServiceTest inicial:
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
Al proyecto agregaremos la referencia a System.ServiceModel y opcionalmente a log4net, modificamos y dejamos de la siguiente manera:
public partial class Service1 : ServiceBase
{
private static readonly ILog _log = LogManager.GetLogger(typeof(Service1)); //opcional [log4net]
private ServiceHost _host = null;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
XmlConfigurator.Configure(); //opcional [log4net]
_host = new ServiceHost(typeof(ServiceClass)); //ServiceClass es la clase del wcf en si mismo
_host.Open();
}
catch (Exception ex)
{
_log.Error("OnStart", ex); //opcional [log4net]
OnStop();
throw;
}
}
protected override void OnStop()
{
try
{
if (_host != null && _host.State == CommunicationState.Opened) _host.Close();
}
catch (Exception ex)
{
_log.Error("OnStop", ex); //opcional [log4net]
throw;
}
}
}
Paso siguiente es ir a la vista de diseño de Service1, click con el derecho y elegir "Add Installer". Esto agregará el instalador propiamente dicho. En la vista de diseño del Instalador tendremos 2 objetos, serviceProcessInstaller1 y serviceInstaller1. En las propiedades de serviceProcessInstaller1 podemos elegir la cuenta con la que se instala el servicio, y en las propiedades de serviceInstaller1 podemos definir en nombre con que se instala el servicio, descripcion, tipo de inicio, etc.
En el App.config agregamos los datos de wcf y compilamos. Los archivos generados se copian en la ubicacion final (ej: C:\Services\Test1).
Abrimos una ventana de comandos y nos vamos a C:\Windows\Microsoft.Net\Framework\v2.0.50727 y ejecutamos la siguiente linea:
installutil.exe C:\Services\Test1\[Nombre del Servicio].exe. Esto registrará el servicio en la pc. Luego debemos iniciarlo. Para actualizar solo debemos pararlo y copiar las dlls nuevas y volver a iniciarlo.
Para la desinstalación usamos: installutil.exe /u C:\Services\Test1\[Nombre del Servicio].exe.