Pregunta

Buenas tardes,

Estoy corriendo en un curioso problema con WCF y IntelliTrace. Tengo una aplicación que estoy probando el uso de un criterio de valoración WCF alojado localmente (el servidor de desarrollo integrado en VS2010) utilizando el basicHttpBinding. La aplicación ha estado funcionando normalmente:. No hay excepciones se están haciendo su camino a la aplicación y todas las llamadas WCF están regresando de datos

Como una broma, decidí echar un vistazo a la salida IntelliTrace y se dio cuenta de que mi primera llamada a WCF dos tiros exceptiosn:

Exception:Thrown: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was thrown: "No connection could be made because the target machine actively refused it"
Exception:Caught: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was caught: "No connection could be made because the target machine actively refused it"

He reducido la aplicación a un caso de uso trivial:

    ServiceClient client = new ServiceClient();
    string[] output = client.LegacyCheck("username");
    Console.WriteLine(output[0]);
    Console.WriteLine(client.GetData(65));

Y consigo el mismo comportamiento. La segunda llamada no tiene ninguna excepción asociado a él.

Estoy muy confundido. Si se rechazó la conexión, entonces ¿por qué la excepción no lo hacen hasta la aplicación? Y ¿por qué es el éxito después de 2 intentos fallidos?

Cualquier ayuda se agradece!

¿Fue útil?

Solución

Por lo que vale, me he dado cuenta de este comportamiento demasiado con mis aplicaciones IronPython / WPF. el tiempo me he dado cuenta que Intellitrace simplemente le está mostrando todas las excepciones que se plantean y capturados durante la operación normal, aunque su parte de una u otra biblioteca de BCL.

Por supuesto, sólo tiene que preocuparse por las excepciones no controladas (después te rompen el de ejecución, que se suele ver en los IntelliTrace como una larga cadena de Thrown: Caught: Thrown: Caught: .... todo el camino hasta Thrown: que será la última línea que la excepción no fue capturado.

Lo que yo estoy dispuesto a apuesta es que el código de WCF try un par de cosas primeras, las capturas de los SocketExceptions y, a continuación, continúa en su camino alegre. No volvería a ver esto, pero para IntelliTrace:)

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