2012-09-10 25 views

Respuesta

9

Las 2 fijaciones son radicalmente diferentes.

  • NetTcpBinding puede ser pensado como un formato propietario MS (generalmente binaria) similar en concepto a RPC (por ejemplo, se puede utilizar para reemplazar .NET Remoting). Es sincrónico, es decir, tanto el cliente como el servidor deben estar en línea al mismo tiempo, y el cliente recibe una respuesta (casi) de inmediato.

  • MSMQ es una solución Middleware orientada a mensajes de Microsoft, que gira en torno a las colas asincrónicas, p. si el servidor de destino está fuera de línea cuando el cliente envía un mensaje, el mensaje se pondrá en cola en el cliente hasta que el servidor vuelva a estar en línea. Cada cola es de una sola vía, aunque la comunicación bidireccional se puede lograr a través de una segunda cola de servidor a cliente. El envío de mensajes WCF MSMQ requiere la instalación del servicio MSMQ en el cliente. Los mensajes en la cola pueden tener un 'timeout' de entrega que se colocará en una cola de letra muerta correspondiente.

ejemplos del mundo real:

  • me gustaría utilizar NetTcpBinding con la serialización binaria para un alto rendimiento, necesidades de comunicación síncrona entre un cliente y un servidor Microsoft WCF, por ejemplo, la carga de archivos, los medios de comunicación, etc., donde Xml no sería útil (de lo contrario, me gustaría utilizar wsHttpBinding para síncrono de mensajes Xml/SOAP)
  • me gustaría utilizar MSMQBinding con DTC activado para asegurar la mensajería fiable entre 2 o más sistemas (por ejemplo, financieros), con al menos uno de los puntos finales está en .Net, y un servidor 'compatible' (no necesariamente WCF, por ejemplo BizTalk, u otros EAI buses o ESB autobuses que tienen adaptadores para MSMQ, por ejemplo, existen puentes entre MSMQ and MQSeries). Los mensajes suelen estar en un formato Xml.

TL; DR

¿significa que el cliente, incluso si el servicio no está funcionando todavía utilizar el servicio

Sí. Si MSMQ se ejecuta localmente, el cliente obtendrá un retorno inmediato respuesta exitosa (indicando que el mensaje ha sido puesto en cola). Sin embargo, esto no significa que el mensaje haya sido recibido con éxito por el servidor.

+1

Gran respuesta, he usado ampliamente WCF en una serie de sistemas complejos y solo quería agregar mis dos centavos. 1. Evite el incumplimiento de WCF, excepto en casos de uso muy específicos, donde proporciona algo que carece de servicios web RESTful. 9/10 veces el dolor de cabeza de WCF no vale la recompensa. 2. NetTcpBinding es sin duda la mejor opción (y definitivamente la más rápida, excluyendo las tuberías con nombre) en mi experiencia personal. Sin embargo, no tiene redundancia incorporada como explica el póster. –

+0

De acuerdo - han pasado 4 años y xml ahora es reparado en su mayoría por los servicios JSON, y WebApi ahora ha superado a WCF en un mundo RESTful. – StuartLC