2008-09-12 12 views
10

¿Usaría WSDualHttpBinding para devoluciones de llamada a dos caras en escenarios del mundo real? Digamos, tengo una aplicación .NET que usa un puerto aleatorio, ¿podría el servicio resolver las direcciones base y el puerto del cliente para las devoluciones de llamadas?WSDualHttpBinding para devoluciones de llamada dúplex

Respuesta

35

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

Intranet

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

Las devoluciones de llamada dúplex en un escenario de Intranet cuando se puede usar WCF tanto en el cliente como en el servidor se logran mejor usando NetTcpBinding o NetNamedPipeBinding. Estos enlaces usan 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 las llamadas devueltas al cliente, el mismo canal utilizado para conectarse al Servicio a través del Enlace se reutiliza sin necesidad de abrir un nuevo puerto.

Internet

En un escenario de Internet peticiones HTTP y las respuestas válidas sólo viajan en una dirección, HTTP está diseñado como un protocolo de una sola vía. Cuando se utiliza WSDualHttpBinding WCF, por lo tanto, se crea un canal HTTP independiente para las devoluciones de llamada. En respuesta a su segunda pregunta: la dirección de destino para esta devolución de llamada al cliente está compuesta por el 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 se reservará exclusivamente en algunos escenarios, lo que provocará conflictos con su aplicación prototipo. Esto es lo que this blog post presenta una solución y para qué está diseñada la propiedad ClientBaseAddress. Independientemente del puerto con el que vaya, 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 saliente como el canal de devolución de llamada independiente.

Una aplicación .NET también puede denotar 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ó en primer lugar en Silverlight 2, que puede considerarse como un 'truco' inteligente para evitar el hecho de que HTTP es unidireccional manteniendo el canal de solicitud abierto durante un largo tiempo (sondeo largo) y usándolo como un canal secundario para llama al cliente. Esto tiene una serie de implicaciones tanto para el cliente como para el servidor, particularmente relevantes para la escala, para obtener más detalles, consulte this post from my blog.

Con una idea de su particular "escenario del mundo real" y sus casos de uso con suerte esto le ayudará a encontrar el enlace correcto para usar en las devoluciones de llamada dúplex.

+0

Muy informativo +1 –

2

Si se trata de una aplicación detrás de un servidor de seguridad, teóricamente sí. Depende de lo que quieras decir con "mundo real"; si con eso quiere decir "alto rendimiento" quizás NetTcpBinding sea una mejor aplicación.

Cuestiones relacionadas