Pregunta

Estoy a punto de escribir un " servidor " aplicación que se encarga de hablar con hardware externo. La aplicación manejará las solicitudes de los clientes. Los clientes envían un mensaje al servidor, y si el servidor está ocupado haciendo cosas con el hardware, los nuevos mensajes se almacenarán en una cola que se procesará más tarde.

El cliente también podrá cancelar una solicitud (si está en la cola del servidor). Cuando la aplicación del servidor finalice con el hardware, podrá enviar el resultado al cliente que solicitó el trabajo.

Las aplicaciones de servidor y cliente pueden o no estar en la misma PC. Todo el desarrollo se realiza en .NET (C #) 2005.

Entonces, mi pregunta es: ¿cuál es la mejor manera de resolver este problema de comunicación?

MSMQ? ¿JABÓN? WCF? Remoting? ¿otro?

¿Fue útil?

Solución

Remoting

Si todo el desarrollo se realiza en .NET 2005, Remoting es la mejor manera de hacerlo. http://en.wikipedia.org/wiki/.NET_Remoting

Otros consejos

Suponiendo que puede usar .NET 3.0 o superior, entonces probablemente desee usar WCF como canal de comunicaciones: la interfaz es coherente, pero le permitirá usar un mecanismo de transporte apropiado según la ubicación del cliente y el servidor en relación con cada uno otro - para que pueda elegir usar SOAP o MSMQ o un formato binario u otros según corresponda (y puede usar el suyo si es necesario). También cubre la necesidad de comunicación bidireccional.

Poner en cola los mensajes en el servidor probablemente debería considerarse como un problema separado, especialmente dada la necesidad de eliminar los mensajes en cola.

Si los procesos de clientes y servidores están en la misma máquina, creo que las canalizaciones con nombre le darán la tasa de transferencia de bytes sin procesar más rápida. Si los procesos se realizan en diferentes máquinas, deberá utilizar el enfoque basado en sockets.

La comunicación remota es muy lenta. basado en los sistemas operativos de destino en los que planea implementar la solución, podría tener opciones como WCF y otros. Sin embargo, la sobrecarga de estos protocolos es algo que quizás desee considerar al decidir.

MSMQ tendría algún sentido, aunque existen consideraciones de seguridad e implementación. Puede mirar un bus de servicio (como NServiceBus o Mass Transit) y también existe SQL Server Service Broker que podría ayudar (y también puede ser utilizado por un bus de servicio como transporte).

WCF sería otra cosa a tener en cuenta, sin embargo, ese es realmente el transporte a través de la red, por lo que probablemente aún desee que las llamadas WCF pongan un mensaje en la cola del servidor.

No recomiendo la comunicación remota, porque es difícil mantener una separación de preocupaciones, y antes de que se dé cuenta, está desarrollando una interfaz muy comunicativa sin darse cuenta. Las llamadas remotas son caras en términos relativos, por lo que debe tratar de mantener los mensajes bastante toscos. WCF sería mi recomendación. No menos importante porque puede configurarlo para usar un transporte HTTP y evitar una gran cantidad de problemas de implementación y seguridad.

.NET Framework proporciona varias formas de comunicarse con objetos en diferentes dominios de aplicación, cada uno diseñado con un nivel particular de experiencia y flexibilidad en mente. Por ejemplo, el crecimiento de Internet ha hecho que los servicios web XML sean un método atractivo de comunicación, porque los servicios web XML se basan en la infraestructura común del protocolo HTTP y el formato SOAP, que utiliza XML. Estos son estándares públicos y se pueden usar inmediatamente con las infraestructuras web actuales sin preocuparse por problemas adicionales de proxy o firewall.

Sin embargo, no todas las aplicaciones deben crearse utilizando algún tipo de servicio web XML, aunque solo sea por los problemas de rendimiento relacionados con el uso de la serialización SOAP a través de una conexión HTTP.

Elección de opciones de comunicación en .NET lo ayuda a decidir qué forma de comunicación interobject desea para su aplicación.

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