Pregunta

Estoy intentando configurar algunas cosas WCF. Actualmente, tengo un servidor que permite a los usuarios remotos descargar archivos y cliente. En el servidor, yo uso una clase ServiceHost. Lo que supongo que debe estar ejecutándose en un hilo separado, sin embargo, la interfaz de usuario del servidor (Windows Forms) se bloquea cuando alguien descargas un archivo. ¿Hay una manera de manejar el modelo de enhebrado WCF?

Gracias!

¿Fue útil?

Solución 2

"De la misma aplicación de Windows Forms si se va a construir la instancia ServiceHost antes de comenzar el hilo de interfaz de usuario, que se ejecutará en su propio hilo. Eso hilos medios de los trabajadores asignados a los mensajes de proceso del grupo de subprocesos en lugar del bucle de mensajes. Por lo tanto , los servicios pueden realmente procesar múltiples peticiones concurrentes ".

Otros consejos

Usted debe agregar un ServiceBehaviorAtttribute a la clase la implementación de su servicio y establezca su propiedad UseSynchronizationContext a falso. Esto hará que las llamadas a su servicio sean sometidas, en su propio hilo.

Ejemplo:

[ServiceBehavior(UseSynchronizationContext=false)]
class YourService : IYourService
{
  // Service Methods
}

Sólo recuerde que si se va a actualizar ninguna Controles desde el interior de sus métodos de servicio, se debe tener presente la -hilo cruzado modelo de programación de Windows Forms .

No debe albergar un servicio WCF dentro de un programa de interfaz de usuario. WCF tiene un modelo de hilos muy específico, que evitará que su interfaz de usuario se ejecute bien.

Básicamente, los cambios del esquema de enhebrado WCF en función del comportamiento de gestión de instancias seleccionado, y también cuando no hay peticiones que llegan al servicio durante un período de tiempo WCF podría suspender el hilo conductor. Todo esto va a causar problemas con la interfaz de usuario.

Lo que hago en estas situaciones, es crear un servicio de Windows de alojamiento WCF , y crear un ServiceContract para exponer los datos necesarios para el seguimiento de la interfaz de usuario. Esta interfaz de usuario se ejecutará independtly en su propio exe, siendo otro cliente del servicio, ir a buscar los datos del servicio, según sea necesario.

Espero que tenga sentido para usted.

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