Pregunta

Ver también ¿Cómo informa un servidor WCF a un cliente WCF sobre los cambios?(Mejor solución que las encuestas simples, por ejemploComentario o encuesta larga)

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 (consulte los enlaces a continuación), pero no logré hacerlo funcionar y no he podido encontrar un código de muestra que lo demuestre.

Requisitos:

  • WCF
  • Los clientes se conectan al servidor a través del puerto tcp 80 (netTcpBinding).
  • El servidor envía información a intervalos irregulares (de 1 minuto a varias horas).
  • Los usuarios no deberían tener que configurar sus firewalls, las inserciones del servidor deben pasar a través de firewalls que tengan todos los puertos de entrada cerrados.Para esto se necesita TCP dúplex en la misma conexión; un enlace 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 todavía está vivo.
  • El servidor es IIS7 con WAS.

La solución parece ser netTcpBinding dúplex.Basado en esta información:

WCF a través de firewalls y NAT

Mantener conexiones abiertas en IIS

Pero todavía tengo que encontrar un ejemplo de código que funcione.Intenté combinar los ejemplos "Duplex" y "TcpActivation" de los ejemplos WCF de Microsoft sin suerte.¿Puede alguien indicarme un código de ejemplo que funcione o crear una pequeña aplicación de muestra?¡Muchas gracias!

¿Fue útil?

Solución

He encontrado un par de soluciones:

Hielo Cero GPL con opción comercial.Sólo lo he probado rápidamente.Parece más potente que .NET Remoting y está desarrollado de forma muy activa.

Objetos Rem El desarrollo comercial y activo lo admite todo, pero no parece tener todas las funciones más avanzadas que utiliza GenuineChannels.

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

Otra solución es utilizar streaming con IIS, según 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, luego 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: Transmisión XML.

Otros consejos

¿Has intentado 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 se pueden abordar directamente y los firewalls no son un problema, ¿ha considerado permitir que los clientes registren una URL que proporcione un contrato compatible?Luego, el servidor puede llamar a este servicio cuando lo necesite, sin la necesidad de establecer una conexión de larga duración (pero en su mayoría inactiva), evita la necesidad de latidos del corazón y puede volverse resistente entre sesiones y conexiones.

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

De todos modos, la mayoría de los entornos corporativos no permitirán que ninguna máquina establezca una conexión TCP saliente.

Además, utilizar este mecanismo significa que tendrá problemas de escala.Creo que una solución más confiable es poner en cola la información y hacer que sus clientes la realicen encuestas con regularidad.Utilice el almacenamiento en caché si es posible, de modo que una encuesta de cliente posterior obtenga los datos almacenados en caché del caché del proxy del cliente, si está usando uno.

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

¿Has probado a utilizar Toredo?Habiendo leído que aparecería allí, probablemente sea demasiado complicado de configurar para un usuario.

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

Buena suerte.

¿Has probado este?DuplexHttpBinding

Utiliza una técnica de sondeo inteligente encapsulada como enlace WCF personalizado.Por lo tanto, debería funcionar desde el primer momento.

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

  • Establezca la opción WebHttp marcada en Firewall -> Avanzado -> Configuración (de configuración de conexión de red) -> Servidor web (Http)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top