start servicio publicar paso example crear application wcf windows-services

publicar - ¿Cómo alojar 2 servicios WCF en 1 servicio de Windows?



wcf service host (4)

Base su servicio en este artículo de MSDN y cree dos servidores de servicio. Pero en lugar de llamar a cada host de servicio directamente, puede dividirlo en tantas clases como desee, lo que define cada servicio que desea ejecutar:

internal class MyWCFService1 { internal static System.ServiceModel.ServiceHost serviceHost = null; internal static void StartService() { if (serviceHost != null) { serviceHost.Close(); } // Instantiate new ServiceHost. serviceHost = new System.ServiceModel.ServiceHost(typeof(MyService1)); // Open myServiceHost. serviceHost.Open(); } internal static void StopService() { if (serviceHost != null) { serviceHost.Close(); serviceHost = null; } } };

En el cuerpo del host de servicio de Windows, llame a las diferentes clases:

// Start the Windows service. protected override void OnStart( string[] args ) { // Call all the set up WCF services... MyWCFService1.StartService(); //MyWCFService2.StartService(); //MyWCFService3.StartService(); }

Luego puede agregar tantos servicios WCF como desee a un servidor de servicios de Windows.

RECUERDE llamar a los métodos de parada también ...

Tengo una aplicación WCF que tiene dos servicios que intento alojar en un solo servicio de Windows usando net.tcp. Puedo ejecutar cualquiera de los servicios muy bien, pero tan pronto como trato de ponerlos a ambos en el Servicio de Windows, solo el primero se carga. He determinado que se llama al segundo administrador de servicios, pero el OnStart nunca se activa. Esto me dice que WCF está encontrando algo mal al cargar ese segundo servicio.

Usando net.tcp sé que necesito activar el puerto compartido e iniciar el servicio de intercambio de puertos en el servidor. Todo esto parece estar funcionando correctamente. Intenté poner los servicios en diferentes puertos tcp y todavía no tuve éxito.

Mi clase de instalador de servicio se ve así:

[RunInstaller(true)] public class ProjectInstaller : Installer { private ServiceProcessInstaller _process; private ServiceInstaller _serviceAdmin; private ServiceInstaller _servicePrint; public ProjectInstaller() { _process = new ServiceProcessInstaller(); _process.Account = ServiceAccount.LocalSystem; _servicePrint = new ServiceInstaller(); _servicePrint.ServiceName = "PrintingService"; _servicePrint.StartType = ServiceStartMode.Automatic; _serviceAdmin = new ServiceInstaller(); _serviceAdmin.ServiceName = "PrintingAdminService"; _serviceAdmin.StartType = ServiceStartMode.Automatic; Installers.AddRange(new Installer[] { _process, _servicePrint, _serviceAdmin }); } }

y ambos servicios se ven muy similares

class PrintService : ServiceBase { public ServiceHost _host = null; public PrintService() { ServiceName = "PCTSPrintingService"; CanStop = true; AutoLog = true; } protected override void OnStart(string[] args) { if (_host != null) _host.Close(); _host = new ServiceHost(typeof(Printing.ServiceImplementation.PrintingService)); _host.Faulted += host_Faulted; _host.Open(); } }


es probable que solo necesite 2 servidores de servicio.

_host1 y _host2.


Si desea que un servicio de Windows inicie dos servicios de WCF, necesitará un instalador de servicio que tenga dos instancias de ServiceHost, las cuales se inician con el método OnStart (único).

Es posible que desee seguir el patrón de ServiceInstaller que se encuentra en el código de la plantilla cuando elige crear un nuevo Servicio de Windows en Visual Studio; en general, este es un buen lugar para comenzar.


Type serviceAServiceType = typeof(AfwConfigure); Type serviceAContractType = typeof(IAfwConfigure); Type serviceBServiceType = typeof(ConfigurationConsole); Type serviceBContractType = typeof(IConfigurationConsole); Type serviceCServiceType = typeof(ConfigurationAgent); Type serviceCContractType = typeof(IConfigurationAgent); ServiceHost serviceAHost = new ServiceHost(serviceAServiceType); ServiceHost serviceBHost = new ServiceHost(serviceBServiceType); ServiceHost serviceCHost = new ServiceHost(serviceCServiceType); Debug.WriteLine("Enter1"); serviceAHost.Open(); Debug.WriteLine("Enter2"); serviceBHost.Open(); Debug.WriteLine("Enter3"); serviceCHost.Open(); Debug.WriteLine("Opened!!!!!!!!!");