2011-06-10 37 views
33

realmente vengo del mundo de Http y nunca hice mucho con el viejo .NET Remoting, que utiliza TCP, pero entiendo los conceptos de TCP y ahora han puesto en práctica varios servicios WCF utilizando la unión en los últimos años net.tcp. La mayoría de las veces, funciona, lo consumo, fin de la historia. Sin embargo, a veces la configuración del servidor es más avanzada y recibo errores de comunicación en un servidor y tal vez no en otro. Para probar si se trata de un servidor de seguridad/servidor/etc. problema Necesito ver si el servicio WCF incluso se puede ver o alcanzar sin problemas. Esto es para un servicio WCF alojado en el Servicio de Windows usando net.tcp que estoy tratando de resolver esta situación.¿Cómo hacer ping o verificar el estado del servicio WCF usando el punto final net.tcp desde el servidor remoto?

La cosa es con un servicio WCF expuesta a través de un enlace HTTP, sólo puede plop la URI en el navegador para ver la página de servicio que me deja saber el servicio está funcionando correctamente. Examen fácil.

¿Cómo hacer el equivalente de un servicio WCF expuesta a través de una unión net.tcp? ¿Hay alguna herramienta o comando que pueda usar para probar, por ejemplo, net.tcp//mycustomWCFService:8123/MyService? He visto algunas publicaciones sobre cómo escribir código para determinar programáticamente si el servicio WCF está disponible, pero no quiero hacerlo de esta manera. Quiero hacer esta comprobación, si es posible, sin código, de forma análoga a mí tirando hacia arriba del extremo HTTP en un navegador.

¡Se agradece cualquier ayuda, gracias!

+2

También me gustaría resolver el mismo tipo de problema. No estoy seguro de si el servicio de WC se está ejecutando o no? –

Respuesta

41

Si su servicio implementa un punto final de metadatos (normalmente denominado mex y anidado debajo del punto final principal, implementado usando el mexTcpBinding en este caso), puede "hacer ping" utilizando la utilidad de línea de comandos svcutil que se proporciona con Visual Studio. Por ejemplo,

svcutil net.tcp://mycustomWCFService:8123/MyService/mex 

Si arroja un error, su servicio está (potencialmente) inactivo. Si tiene éxito, estás (probablemente) en el negocio. Como sugieren los paréntesis anteriores, es una aproximación. Significa que hay un oyente en la dirección y que puede atender una solicitud de metadatos.

+1

Si estoy en un servidor remoto donde no se instaló Visual Studio, ¿la utilidad svcutil.exe aún estaría instalada? – atconway

+2

No, no lo haría, pero no tiene ninguna dependencia de la que tenga conocimiento, siempre y cuando pueda copiarla en el servidor remoto en el que estaría trabajando. –

+0

Creo que podría envolver la llamada usando el código y una pequeña aplicación de WinForms usando svcutil.exe como una dependencia para optimizar esto. Gracias por la sugerencia. ¡Disfruta de los 50 puntos adicionales! – atconway

3

Una forma simple de hacerlo sería (suponiendo que el servicio esté alojado en IIS) agregar un enlace HTTP (usando un puerto diferente !!) al mismo sitio IIS y agregar <serviceDebug httpHelpPageEnabled="true" /> a los comportamientos del servicio. De esta forma, puede verificar fácilmente que el servicio esté activo navegando a su URL HTTP en un navegador. Es cierto que de esa manera solo puede averiguar si el servicio está activo o no, por ejemplo, no podrá detectar ningún problema de red en el puerto TCP en particular.

Si necesita resolver este problema también, o si no es posible agregar un enlace HTTP, puede agregar simplemente una operación "PING" al contrato de servicio y usar un cliente net.tcp para invocar ese.

+0

Una buena idea para los sitios alojados en IIS que originalmente solo usaban un enlace net.tcp como mencionaste, pero para mi caso, hablaba más como un servicio de WCF alojado en un servicio de Windows usando net.tcp. Edité el OP para incluir esta información. – atconway

29

Otra manera que encontré para al menos ver si se está escuchando es emitir el siguiente comando 'netstat' (de un símbolo del sistema) en el servidor instalado:

-ona -an | encontrar "8123"

(Sí que es un delimitador de tubería en el comando anterior). Si se devuelve algo, está escuchando activamente y alojado en el puerto buscado.

0

También puede utilizar el programa cliente Telnet para descubrir los puertos de escucha, es decir, telnet {URL o IP} {puerto}. Para comprobar si un sitio web está activo, 'telnet www.godaddy.com 80' debe producir inicialmente una ventana en blanco seguida de una respuesta de Tiempo de espera de solicitud (400) si no se siguen los comandos.

Cuestiones relacionadas