Pregunta

Necesito un poco de ayuda para resolver un problema que estoy enfrentando una con la comunicación de un cliente de escritorio con un servicio WCF alojado en IIS.
Lo que estoy tratando de hacer en mi caso de prueba:

  1. servidor aloja un servicio WSDualHttpBinding
  2. cliente establece una conexión (llamadas Registro método) a esto proporcionando su URI de devolución de llamada que contiene la dirección IP del cliente
  3. Una vez establecida la conexión, una página web se puso en marcha por la aplicación cliente. Los tipos de usuario algún texto en el cuadro de texto y hace clic en Enviar. La página web envía el texto a todos los clientes de escritorio registrados.

Problema:
En el paso 2, un PC puede tener múltiples direcciones IP (adaptador Ethernet, adaptadores de bucle, etc.). Si durante la llamada de registro, una dirección IP de esta lista se envía en la URL de devolución de llamada que no puede ser llamado de nuevo desde el servidor (por ejemplo, bucle invertido IP del adaptador), se emite una excepción de tiempo de espera. Después de unos tales intentos, el servidor no puede aceptar llamadas de clientes más (ya sea IP válida o no). A veces “servidor demasiado ocupado” excepción fue arrojado.

(no puedo usar el nombre completo de la máquina en el URI de devolución de llamada debido al DNS / WINS problemas de configuración haciendo que el servidor no se resuelve nombre de la máquina a la dirección IP correcta).

Cómo reproducir:
 a. Publicar el servidor en IIS. De un equipo diferente con varias direcciones IP, ejecute el cliente. El cliente genera excepciones de tiempo de espera y salir del programa después de 3 intentos  si. Un parámetro en el app.config permite escribir en la dirección IP correcta (IP a usar). Ahora bien, si se pone en marcha el programa, todo funciona bien.
 C. Si quito esta dirección IP especificada anteriormente de manera que se utiliza una IP incorrecta, de nuevo un paso sucede. Ejecutar los programas de 2-3 veces en este modo.
 re. Haga los cambios que en el paso b y ejecutar el programa. A veces me da una excepción de tiempo de espera. En otras ocasiones, el sitio web proceden arriba. Sin embargo, cuando se introduce y se envía el texto, que no llega al cliente. (El método de registro trabajó a pesar de que el servicio web no ha recibido ninguna llamada. Envío de función falla ya que no hay clientes registrados en el servicio web.

No estoy seguro de por qué exactamente sucede esto y cómo hacer frente a ella. Aquí está mi solución de Visual Studio - http://bit.ly/atKfOS

apreciar altamente cualquiera de las entradas, comentarios. Medio Ambiente: Servidor - Windows XP (IIS 5), Windows Server 2008 SP2 x64 (IIS 7), Cliente: Windows XP

Gracias GC

¿Fue útil?

Solución

Bueno, creo que el problema principal es la siguiente:. Cuando el servidor intenta volver a llamar al cliente y falla, el canal entre los dos serán una "con fallo", y inutilizados

Después de que ocurra tal evento, tiene que disponer el proxy del lado del cliente, y volver a crearla - o con gracia manejar la excepción de tiempo de espera en el servidor (atraparlo, convertirlo en un error de SOAP, registrarlo - cualquiera que sea - sólo don' t dejar que el TimeoutException .NET sin filtrar pase de vuelta al cliente, esto va a criticar el canal).

¿Qué haces en tu lado del servidor cuando un TimeoutException como sucede? ¿Se asegura que no brotan excepción de que todo el camino hasta el canal ??

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