.net wcf firewall push duplex

.net - ¿WCF empuja al cliente a través del firewall?



push duplex (6)

En la mayoría de las configuraciones de firewall, la conexión TCP será derribada por el firewall si está inactiva para conservar recursos. El tiempo de espera inactivo probablemente no sea algo que pueda controlar. Algunos los derribarán si están inactivos y se está alcanzando un límite de recursos.

La mayoría de los entornos corporativos no permitirán que ninguna máquina realice una conexión TCP de salida de todos modos.

Además, usar este mecanismo significa que vas a tener problemas de escala. Creo que una solución más confiable es poner en cola la información y hacer que sus clientes hagan encuestas regularmente. Si es posible, utilice el almacenamiento en caché de modo que una encuesta de cliente posterior obtenga los datos almacenados en caché del caché de proxy del cliente, si es que están usando uno.

Si tiene que enviar los datos de manera oportuna, en un terreno secundario (es decir, servicios financieros), considere alguna infraestructura de mensajería, como un distribuidor NServiceBus en el lado del cliente, pero eso requerirá una instalación del cliente ...

Entonces, ¿has intentado usar Toredo? Después de leer que aparecería allí, es demasiado complicado para que el usuario lo configure.

Consulte también ¿Cómo informa un servidor de WCF a un cliente de WCF sobre los cambios? (Mejor solución que un sondeo simple, por ejemplo, Coment o larga votación)

Necesito usar tecnología push con WCF a través de firewalls de cliente. Este debe ser un problema común, y sé con certeza que funciona en teoría (ver los enlaces a continuación), pero no lo pude hacer funcionar, y no he podido encontrar una muestra de código que lo demuestre.

Requisitos:

  • WCF
  • Los clientes se conectan al servidor a través del puerto tcp 80 (netTcpBinding).
  • El servidor restituye la información a intervalos irregulares (de 1 minuto a varias horas).
  • Los usuarios no deberían tener que configurar sus firewalls, los impulsos del servidor deben atravesar firewalls que tienen todos los puertos entrantes cerrados. Para esto se necesita duplex TCP en la misma conexión, una vinculación dual no funciona ya que se debe abrir un puerto en el firewall del cliente.
  • Los clientes envían latidos al servidor a intervalos regulares (quizás cada 15 minutos) para que el servidor sepa que el cliente aún está activo.
  • El servidor es IIS7 con WAS.

La solución parece ser duplex netTcpBinding. Basado en esta información:

WCF a través de cortafuegos y NAT

Mantener las conexiones abiertas en IIS

Pero todavía tengo que encontrar una muestra de código que funcione ... Intenté combinar las muestras "Duplex" y "TcpActivation" de las muestras de WCF de Microsoft sin suerte. Por favor, alguien me puede indicar un código de ejemplo que funcione, o crear una pequeña aplicación de muestra. ¡Muchas gracias!


¿Has probado mirar: http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

¿Puedes dar ejemplos de lo que ya has intentado? Con detalles de firewalls, etc., mensajes de error?

Si tanto el cliente como el servidor pueden abordarse directamente y los firewalls no son un problema, ¿ha considerado permitir que los clientes registren una URL que proporcione un contrato compatible? El servidor puede llamar a este servicio siempre que lo necesite, sin la necesidad de establecer una conexión de larga ejecución (pero principalmente inactiva), evita la necesidad de latidos cardíacos y puede hacerse resistente a través de sesiones / conexiones.


¿Has probado este? DuplexHttpBinding

Está utilizando una técnica de sondeo inteligente encapsulada como enlace WCF personalizado. Por lo tanto, debería funcionar de la caja.


Puede hacer los siguientes cambios en el cliente para acceder al servicio web dúplex en el cliente habilitado para Firewall.

  • Configure la opción WebHttp en Firewall -> Avanzado -> Configuración (de Configuración de conexión de red) -> Servidor web (Http)

He encontrado un par de soluciones:

ZeroC Ice GPL con una opción comercial. Solo han probado rápidamente. Parece más poderoso que .NET Remoting y se desarrolla muy activamente.

RemObjects Commercial, desarrollo activo, es compatible con todo, pero no parece tener todas las características más avanzadas que utiliza GenuineChannels.

GenuineChannels . Utiliza la comunicación remota con muchas características adicionales, la más importante es que funciona a través de NAT sin la necesidad de abrir el firewall del cliente. Lamentablemente parece estar muy muerto.

Otra solución es usar la transmisión con IIS, de acuerdo con este artículo: Mantener conexiones abiertas en IIS

El cliente realiza la primera conexión (http con IIS6, tcp con IIS7) al servidor en el puerto 80, la conexión se mantiene abierta con una respuesta de transmisión que nunca termina.

No he tenido tiempo de experimentar con esto, y no he encontrado una muestra que diga que resuelve específicamente el problema del firewall, pero aquí hay una muestra excelente que probablemente funcione: Streaming XML .


No he intentado el escenario del que hablas así que no puedo ser de mucha ayuda, lo siento. Si todo lo que necesita para omitir es el firewall del cliente, es posible que desee verificar esta publicación .

Buena suerte.