WCF fallado: ¿qué tipo de falla?

Estoy usando MSMQ y WCF. Ahora, el MSMQ podría quedar sin conexión o podría haber algunos errores de comunicación entre WCF y el destino. Sé que puedo suscribirme al evento Faulted en el serviceHost y cuando el MSMQ se cae/desconecta, obtengo ese evento, genial. Sin embargo, ¿cómo es posible saber el tipo de avería que se ha producido? Necesito estar seguro de que se trata de un error de comunicación de algún tipo y, de ser así, quiero volver a conectarme después de un período de tiempo y seguir intentándolo hasta que se alcance un "número mágico".

No se lanza ninguna excepción desde el servicio. Es justo cuando MSMQ se desconecta, el servicio WCF falla pero necesita saber el tipo de falla.

Muchas Gracias

preguntado el 03 de mayo de 12 a las 13:05

no del todo cristiano, pero gracias. Esto es para MSMQ, pero vi la documentación de IErrorHandler en MSDN antes, pero eso es para el lado del servidor, no para el lado del cliente. -

1 Respuestas

Si no son los detalles de la excepción, como sugiere Christian K, lo que está buscando es por qué un servicio/cliente WCF no recibe otras excepciones de comunicación, entonces la razón es que netMsmqBinding implementa un patrón de "disparar y olvidar".

El servicio WCF está completamente desconectado del cliente por la tubería de MSMQ, solo escucha mensajes en la cola de destino de MSMQ. Las operaciones de servicio con netMsmqBinding deben configurarse para que sean unidireccionales (return void) porque una vez que el cliente de WCF ha colocado correctamente un mensaje en la cola de salida de MSMQ, su trabajo está completo. La suposición es que MSMQ proporciona garantiza entrega del mensaje al servicio WCF. MSMQ 4.0 manejará la preocupación que tenga sobre "reconectar" y "reintentos de números mágicos".

contestado el 03 de mayo de 12 a las 16:05

Gracias. Estoy usando MSMQIntegratedBinding, no es que haga mucha diferencia. Entiendo el fuego y olvido. Pero sí sé que el servicio PUEDE fallar cuando el MSMQ en el destino está fuera de línea (suscrito al evento OnFaulted de la clase serviceHost). Entonces, sé que tiene fallas, pero necesito saber el tipo de excepción o la razón por la cual tiene fallas, para que pueda hacer mi propio reintento interno de tratar de volver a conectarme a ese MSMQ agrupado que se desconectó; de lo contrario, el servicio NO podrá recibir esos mensajes de la cola de MSMQ a menos que lo reinicie manualmente. - ahmed ilyas

MSMQ en clúster puede ser quisquilloso. Mi cliente lo usa, pero yo no participé en su configuración. Según nuestra experiencia, una vez que MSMQ acepta un mensaje y lo coloca en la cola de salida de la máquina cliente de origen, nunca se "pierde". Tuvimos problemas en el desarrollo cuando algunos servidores se desconectaron periódicamente y el período de tiempo de vida predeterminado se agotó, por lo que los mensajes se movieron a la cola de mensajes fallidos del sistema en la máquina cliente. Sin embargo, no entiendo muy bien la razón por la que desea volver a intentarlo/reconectarlo. - Sixto Sáez

es porque en un entorno agrupado, si elimina uno de los nodos, el MSMQ agrupado se propaga al otro nodo y esto desconecta el cliente WCF (se vuelve defectuoso). por lo tanto, los clientes conectados pierden la conexión y no recibirán mensajes, sino que los mensajes se colocarán en la cola y se acumularán hasta que reinicie la aplicación WCF. Es por eso que quiero saber cuándo falla la aplicación y saber qué TIPO de falla es: ahmed ilyas

En esa situación, crearía un proceso de "escucha de latidos" que se activará cada vez que ocurra una falla para evaluar la condición del cliente WCF o posiblemente en función de la cantidad de mensajes en la cola y reiniciar el cliente si es necesario. Aparte de la sugerencia de Christian, no conozco otra forma de manejar eso. - Sixto Sáez

Gracias. otro problema relacionado es que estoy creando un nuevo WCF MSMQ. Ahora, una muestra que seguí en MSDN funciona bien, pero cuando creo la mía, no funciona. Siempre recibo un error defectuoso, pero no sé cuál es ese error. es frustrante tratar de averiguar qué falló. Esto es simplemente cuando el host ha abierto la conexión y luego aparece una falla. - ahmed ilyas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.