Domanda

Non mi sento davvero a mio agio con questo argomento poiché fino ad ora ho sempre scritto il mio logger.

Ho un servizio Web REST WCF. Questo servizio deve registrare le informazioni dagli errori a chi lo utilizza e quando.

Per fare ciò è stato scelto il blocco dell'applicazione di registrazione dalla libreria Enterprise (5.0). Per mantenere buone prestazioni, abbiamo deciso di utilizzare MSMQ. L'obiettivo è archiviare i registri lì fino a quando non arriviamo a metterli in file ad un certo punto.

Ho visto su diversi siti Web che possiamo usare WCF per trasmettere il messaggio a un MSMQ e quindi utilizzare un'altra entità per lavorare con la coda o che possiamo usare MSMQ come protocollo di trasporto per comunicare con WCF. In questo momento uso solo la classe di logger di laboratorio per inserire i registri nella coda.

Voglio solo usare MSMQ per desincronizzare il mio servizio web dalla funzionalità di registrazione.

Quindi ecco le mie domande: quali sono i casi in cui MSMQ è utile con WCF? Nel caso che descrivo non è eccessivo utilizzare un'altra applicazione WCF solo per registrare alcune cose in un file?

È stato utile?

Soluzione

Penso che tu stia confondendo due cose qui. Il trasporto MSMQ in WCF è proprio questo, un meccanismo di trasporto che può essere utilizzato al posto di HTTP o TCP. Il tuo problema è che (presumo) vuoi registrare in modo asincrono da Il servizio WCF, che è una buona idea. ENTLIB include il servizio di distributore MSMQ, che raccoglierà gli eventi di registrazione scritti dall'applicazione a una coda assumendo una configurazione del blocco di registrazione correttamente configurata che specifica MSMQ come destinazione. Il distributore lo scriverà quindi nel database.

La registrazione asincrona è una cosa molto intelligente da fare, perché assicura che i tuoi eventi siano in un mezzo persistente in situazioni catastrofiche in cui il DB ha eliminato, per esempio. Per non parlare del database non è accessibile come parte delle normali operazioni di applicazione, che elimina un potenziale punto di fallimento.

Ho lavorato su un'applicazione Web una volta che utilizzava un meccanismo di registrazione del database personalizzato. C'erano luoghi in cui un'operazione DB avrebbe avuto luogo all'interno di una transazione e dopo fallimento (dicono che un errore di vincolo relazionale da ADO) avrebbe scritto un messaggio al registro ... solo per farlo tornare indietro insieme alla transazione principale. Questo è il tipo di problema in cui puoi affrontare se stai scrivendo direttamente nel database come parte della tua strategia di gestione delle eccezioni.

Comunque, non sono sicuro che questo risponda alla tua domanda. Ecco Una buona panoramica su come tutto funziona in entlib.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top