Pregunta

un nuevo miembro aquí. Es bueno ver una comunidad tan limpio.

Después de un poco de investigación, decidí usar WCF en mi aplicación para hacer comunicación entre procesos, por lo que estoy usando la unión del NetNamedPipeBinding.

El alojamiento de aplicaciones ServiceHost no es un servidor dedicado, por lo que tiene que generar el ServiceHost a través de un hilo. Hasta aquí todo bien.

Así que tengo algo como lo siguiente:

Foo()
{
    Thread serverThread = new Thread(new ThreadStart(ServerThread));
    serverThread.Start();
    Console.WriteLine("Foo Exited");
}

ServerThread()
{
   Uri baseAddress = new Uri("net.pipe://localhost/service");
   ServiceHost serviceHost = new ServiceHost(typeof(MyService), baseAddress);
   ...
   serviceHost.Open();
   Console.WriteLine("Server Thread Exited");
}

Así como se espera, veo:

->   Server Thread Exited
->   Foo Exited

Sin embargo, para mi sorpresa, a pesar de que el hilo se ejecuta el servidor de ha excitado, el cliente todavía puede conectarse a la ServiceHost y el host de servicio procesa la solicitud correctamente!

Así que ¿cómo es que la ServiceHost todavía está procesando y el tratamiento de las solicitudes pesar de que es hilo principal (el que se creó el) está muerto?

También hay una mejor manera de mantener el ServerThread vivo entonces un while (true) {rosca. Dormir (100);}

Gracias.

¿Fue útil?

Solución

Cuando llama abierta sobre la ServiceHost, se creará un hilo adicional para escuchar las solicitudes de servicio entrantes. De esta manera, el hilo puede haber terminado de ejecutarse, pero otro hilo ha sido creado, y continuará funcionando hasta que llame "Cerrar" en la ServiceHost.

Puede no ser necesario en su caso a desovar cerca de un hilo a sí mismo. Sólo tiene que abrir su ServiceHost en el hilo principal de la aplicación. A continuación, puede hacer otras cosas en su hilo principal, y cuando esté listo para matar al huésped, simplemente llame serviceHost.Close ().

He aquí una descripción bastante buena que encontré:

http://www.code-magazine.com/article. aspx? QuickID = 0701041 & page = 1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top