Pregunta

No me siento realmente cómodo con este tema, ya que siempre escribí mi propio registrador hasta ahora.

Tengo un servicio web WCF REST. Este servicio necesita registrar información de errores a quién la usa y cuándo.

Para hacerlo, se ha elegido el bloque de aplicaciones de registro de Enterprise Library (5.0). Para mantener un buen rendimiento, decidimos usar MSMQ. El objetivo es almacenar los registros allí hasta que llegamos a ponerlo en el archivo en algún momento.

He visto en varios sitios web que podemos usar WCF para transmitir el mensaje a un MSMQ y luego usar otra entidad para trabajar con la cola o que podemos usar MSMQ como un protocolo de transporte para comunicarse con WCF. En este momento solo uso la clase de laboratorio para insertar los registros en la cola.

Solo quiero usar MSMQ para desyectar mi servicio web de la funcionalidad de registro.

Entonces, aquí están mis preguntas: ¿Cuáles son los casos en que MSMQ es útil con WCF? En el caso de que describo, ¿no es exagerado usar otra aplicación WCF solo para registrar algunas cosas en un archivo?

¿Fue útil?

Solución

Creo que estás confundiendo dos cosas aquí. El transporte MSMQ en WCF es solo eso, un mecanismo de transporte que se puede usar en lugar de HTTP o TCP. Tu problema es que (supongo) quieres registrar de forma asincrónica de El servicio WCF, que es una buena idea. Entlib incluye el servicio de distribuidores MSMQ, que recogerá eventos de registro escritos desde su aplicación a una cola suponiendo una configuración de bloque de registro configurada correctamente que especifica MSMQ como el destino. El distribuidor lo escribirá en la base de datos.

El registro asincrónico es algo muy inteligente, porque asegura que sus eventos estén en un medio persistente en situaciones catastróficas donde el DB ha eliminado, por ejemplo. Sin mencionar que no se accede a la base de datos como parte de las operaciones de aplicación normales, lo que elimina un posible punto de falla.

Trabajé en una aplicación web una vez que estaba utilizando un mecanismo de registro de base de datos personalizado. Hubo lugares donde una operación de DB se llevaría a cabo dentro de una transacción y tras el fracaso (digamos, un error de restricción relacional de ADO) escribiría un mensaje al registro ... solo para que se retire junto con la transacción principal. Ese es el tipo de problema en el que puede meterse si está escribiendo directamente a la base de datos como parte de su estrategia de manejo de excepciones.

De todos modos, no estoy seguro de si esto responde a tu pregunta. Aquí es Una buena visión general de cómo funciona todo esto en Entlib.

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