Pregunta

Estoy desarrollando un modelo de mando maestro-esclavo por el cual algunas aplicaciones "Maestro" envía comandos a los procesos homogéneos llamados "esclavo" para hacer alguna tarea y luego responder de nuevo con el estado de completo fracaso o proceso. sino que también debe exponer algunos datos al maestro disponibles bajo petición.

¿Cómo sería este modelo verá como en WCF?

sería maestro y cada instancia de emabrgo propios servicios del esclavo? sería único maestro anfitrión? Sólo esclavo? Debería estar utilizando contratos de devolución de llamada? Los contratos de datos? Los contratos de servicio o simplemente.

Como nota al margen, esto es un poco ancho de banda, de baja intensidad, proyecto sólo la distribución interna que se utiliza para las pruebas de producto y no deben ser considerados como un proyecto "grande de alta demanda".

¿Fue útil?

Solución

Definitivamente va a tener contratos de servicio - una necesidad - de una forma u otra. Esto sólo define su servicio y las operaciones (métodos) en él (OperationContract).

Si se trata de un sistema interno "detrás del firewall", usted podría mirar a un dúplex de unión, por ejemplo, que la llamada Maestro Esclavo, y el informe de esclavos hacia atrás en un canal dúplex cuando esté hecho. Fuera de la caja, no sólo el WsDualHttpBinding para apoyar a doble cara, pero ya que estás interna, detrás del firewall, es posible que desee ver en la creación de su propia unión doble de basado en TCP (que no es tan difícil como puede parecer a primero!).

En este escenario, ambas aplicaciones involucradas son realmente servidor y el cliente al mismo tiempo.

Usted tendrá DataContracts en alguna manera, forma o forma para definir los datos que se está moviendo alrededor de entre maestro y esclavo -. Así que de nuevo, sí, usted tendrá que tener contratos de datos

EDIT: Por supuesto, otro enfoque podría ser el uso de dos colas de mensajes MSMQ; el Maestro deja caer su solicitud de "trabajo" en una cola, que el esclavo escucha y recoge en la solicitud de empleo. Cuando se hace el esclavo, que a su vez cae una respuesta en la cola de respuesta a que el Maestro es un oyente, y recibe una notificación de que el trabajo se está haciendo de esa manera.

Marc

Otros consejos

Estoy de acuerdo con Jeremy aquí .. Lo que usted describe no necesita la complejidad de los contratos de devolución de llamada. Los nodos de trabajo podrían simplemente exponer un servicio WCF (o incluso un servicio web WSDL o de descanso para el caso ...) y entonces el controlador simplemente se necesita saber las direcciones URL de cada uno de los nodos secundarios y enviar mensajes a los nodos de trabajo.

Si desea que el controlador sea capaz de transmitir un solo mensaje y tienen todas el trabajador (que realmente no les gusta la analogía maestro / esclavo ... Hace tiempo que cambié a llamándolo controlador / trabajador) nodos de hacer algo en respuesta y publicar su progreso hacia el grupo, entonces puede que quiera usar el canal P2P menudo subestimado disponible dentro de WCF. Esto permite que un grupo de servicios escritos en WCF para hablar unos con otros a la vez como compañeros con las direcciones URL que se utilizan casi como separadores tema / conversación.

Así, por ejemplo, puede emitir comandos en el net.p2p: // laboratorios / comandos canal. Sólo el controlador envía comandos en ese canal, pero todos los nodos de trabajo escuchar. Cuando terminan haciendo sus cosas de forma asíncrona, pueden informar sobre el progreso de vuelta en el net.p2p: // laboratorios / status canal. Un beneficio adicional de este enfoque es que (si necesita esta función), los trabajadores individuales ganarían la capacidad de saber lo que todos los demás trabajadores están haciendo.

Tenga en cuenta, sin embargo, que si se utiliza P2P entonces usted tendrá que hacer frente con la afirmación - que puede terminar con 2 nodos aceptar el mismo comando. Si esto está muy bien, entonces P2P es su herramienta. Si necesita comandos que se emitirán y sólo recogidos en serie por los nodos individuales a medida que estén libres (un escenario más probable la hora de contar los nodos remotos para ejecutar scripts de prueba individuales, etc), entonces se puede utilizar una MSMQ vinculante en lugar de P2P. A continuación, todos los trabajadores se convierten en clientes que reciben mensajes de la cola y se puede contrarrestar con mayor facilidad la situación de varios trabajadores que acepte la misma petición.

En referencia adicional: un post que escribí hace un tiempo en el canal Peer.

Escenarios Canal Peer en MSDN - Esto es bueno porque se puede ir desde aquí a Peer conceptos de canal de la guía de referencia.

Peer Blog del equipo de Canal

Si el procesamiento esclavo tomará mucho tiempo, entonces los contratos de devolución de llamada puede estar en orden. De lo contrario sólo podría bloquear en el Master de espera para el esclavo para completar (es posible que tenga que ajustar la configuración del cliente de WCF por lo que no tiene tiempo de espera).

Sobre la base de su descripción, creo que sería lo único que necesitas para alojar el servicio WCF en los nodos esclavo y el maestro podría ser sólo un cliente que consume los servicios WCF expuestos por los esclavos.

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