Pregunta

¿El uso de WSDualHttpBinding para devoluciones de llamadas dúplex funcionaría en escenarios del mundo real?Digamos que tengo una aplicación .NET que utiliza un puerto aleatorio. ¿Podría el servicio resolver las direcciones base y el puerto del cliente para las devoluciones de llamada?

¿Fue útil?

Solución

Una respuesta completa a su pregunta depende de que el "escenario del mundo real" sea un escenario de Intranet o de Internet.Aunque WSDualHttpBinding funciona en ambos escenarios, hay detalles específicos que se deben tener en cuenta:

Intranet

WSDualHttpBinding funcionará con su aplicación .NET utilizando un puerto personalizado preconfigurado en un escenario de Intranet y "Sí", el servicio podrá resolver las direcciones base del cliente y el puerto para devoluciones de llamadas:exactamente como se explica a continuación.La razón por la que se explica a continuación es que WSDualHttpBinding está diseñado principalmente para usarse a través de Internet.

Las devoluciones de llamadas dúplex en un escenario de intranet cuando se puede usar WCF tanto en el cliente como en el servidor se logran mejor mediante NetTcpBinding o NetNamedPipeBinding.Estos enlaces utilizan TCP e ICP respectivamente como transporte (en lugar de HTTP) y una codificación binaria personalizada, por lo que se requiere WCF en ambos lados.Para devolver llamadas al cliente, se reutiliza el mismo canal utilizado para conectarse al Servicio a través del Enlace sin necesidad de abrir un nuevo puerto.

Internet

En un escenario de Internet, las solicitudes y respuestas HTTP válidas solo viajan en una dirección, HTTP está diseñado como un protocolo unidireccional.Por lo tanto, cuando se utiliza WSDualHttpBinding, WCF crea un canal HTTP separado para devoluciones de llamadas.En respuesta a su segunda pregunta:la dirección de destino para esta devolución de llamada al cliente se compone del nombre de host de la máquina cliente y el puerto 80 de forma predeterminada.Si el cliente es una máquina de desarrollo, por ejemplo, y tiene IIS instalado, el puerto 80 estará reservado exclusivamente en algunos escenarios, lo que provocará conflictos con su aplicación prototipo.Esto es lo que esta publicación de blog presenta una solución y para qué está diseñada la propiedad ClientBaseAddress.Independientemente del puerto que elija (el predeterminado o uno personalizado), debe asegurarse de que todos los firewalls y enrutadores de ambos lados estén configurados correctamente para permitir que se establezcan tanto el canal de salida como el canal de devolución de llamada separado.

Una aplicación .NET también puede indicar una aplicación Silverlight.Debido al hecho de que una aplicación Silverlight que se ejecuta en un navegador no puede aceptar nuevas conexiones HTTP entrantes, WSDualHttpBinding con su canal posterior independiente no funcionará.Por lo tanto, PollingDuplexHttpBinding se creó por primera vez en Silverlight 2, lo que puede considerarse un "truco" inteligente para evitar el hecho de que HTTP es unidireccional al mantener el canal de solicitud abierto durante mucho tiempo (sondeo largo) y usarlo como canal secundario para vuelve a llamar al cliente.Esto tiene una serie de implicaciones tanto en el lado del cliente como en el del servidor, particularmente relevantes para el escalado; para obtener más detalles, consulte esta publicación de mi blog.

Con una idea de su "escenario del mundo real" particular y sus casos de uso, es de esperar que esto le ayude a determinar el enlace correcto que debe utilizar para las devoluciones de llamada dúplex.

Otros consejos

Si se trata de una aplicación detrás de un firewall, en teoría sí.Depende de lo que quieras decir con "mundo real";Si con eso te refieres a "alto rendimiento", quizás NetTcpBinding sea un mejor enfoque.

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