2010-11-15 13 views
5

Estoy iniciando un proceso hijo que expone un punto final WCF. ¿Cómo puedo señalar desde el proceso hijo al proceso principal que el niño está completamente inicializado y que ahora puede acceder al punto final?Señalización a un proceso primario de que un proceso hijo está completamente inicializado

que había pensado sobre el uso de semáforos para este propósito, pero no puedo encontrar la manera de lograr la señal requerida.

 string pipeUri = "net.pipe://localhost/Node0"; 
     ProcessStartInfo startInfo = new ProcessStartInfo("Node.exe", "-uri=" + pipeUri); 
     Process p = Process.Start(startInfo); 
     NetNamedPipeBinding binding = new NetNamedPipeBinding(); 
     var channelFactory = new ChannelFactory<INodeController>(binding); 
     INodeController controller = channelFactory.CreateChannel(new EndpointAddress(pipeUri)); 

     // need some form of signal here to avoid.. 
     controller.Ping() // EndpointNotFoundException!! 

Respuesta

3

Me gustaría utilizar un sistema de todo el EventWaitHandle para esto. La aplicación principal puede entonces esperar que el proceso hijo señale ese evento.

Ambos procesos crean el evento llamado y entonces uno espera a que se señalará.

// I'd probably use a GUID for the system-wide name to 
// ensure uniqueness. Just make sure both the parent 
// and child process know the GUID. 
var handle = new EventWaitHandle(
    false, 
    EventResetMode.AutoReset, 
    "MySystemWideUniqueName"); 

Mientras que el proceso hijo se acaba de señalar el evento llamando handle.Set(), el proceso padre espera a que sea configurada usando uno de los métodos WaitOne.

Cuestiones relacionadas