Frage

Ich fühle mich mit diesem Thema nicht wirklich wohl, da ich bis jetzt immer meinen eigenen Logger geschrieben habe.

Ich habe einen WCF REST -Webdienst. Dieser Dienst muss Informationen von Fehlern bis hin zu wer und wann protokollieren.

Dazu wurde der Protokollierungsantragsblock aus der Enterprise Library (5.0) ausgewählt. Um eine gute Leistung aufrechtzuerhalten, haben wir uns für die Verwendung von MSMQ entschieden. Ziel ist es, die Protokolle dort zu speichern, bis wir sie irgendwann in die Datei einfügen.

Ich habe auf mehreren Websites gesehen, dass wir mit WCF die Nachricht an ein MSMQ übertragen und dann eine andere Entität verwenden können, um mit der Warteschlange zu arbeiten, oder dass wir MSMQ als Transportprotokoll verwenden können, um mit WCF zu kommunizieren. Im Moment verwende ich nur die Laborklasse des Labors, um die Protokolle in die Warteschlange einzufügen.

Ich möchte nur MSMQ verwenden, um meinen Webservice aus der Protokollierungsfunktionalität zu deSync.

Hier sind meine Fragen: In welchen Fällen, in denen MSMQ mit WCF nützlich ist? In dem Fall, dass ich beschreibe, ist es nicht übertrieben, eine andere WCF -Anwendung zu verwenden, nur um einige Dinge in einer Datei zu protokollieren?

War es hilfreich?

Lösung

Ich denke, Sie verwechseln hier zwei Dinge. Der MSMQ -Transport in WCF ist genau das, ein Transportmechanismus, der anstelle von HTTP oder TCP verwendet werden kann. Ihr Problem ist, dass Sie (ich nehme an) asynchron protokolliert möchten aus Der WCF -Service, was eine gute Idee ist. Entlib enthält den MSMQ-Distributor-Dienst, mit dem Protokollierungsereignisse von Ihrer Anwendung auf eine Warteschlange abgeholt werden, die eine ordnungsgemäß konfigurierte Protokollierungsblockkonfiguration übernimmt, die MSMQ als Ziel angibt. Der Distributor schreibt es dann tatsächlich in die Datenbank.

Eine asynchrone Protokollierung ist eine sehr kluge Sache, da sie sicherstellen, dass Ihre Ereignisse in katastrophalen Situationen in einem anhaltenden Medium sind, in denen die DB zum Beispiel abgeschafft hat. Ganz zu schweigen von der Datenbank wird im Rahmen normaler Anwendungsvorgänge nicht zugegriffen, wodurch ein potenzieller Fehlerpunkt beseitigt wird.

Ich habe einmal an einer Webanwendung gearbeitet, die einen benutzerdefinierten Datenbank -Protokollierungsmechanismus verwendet hat. Es gab Orte, an denen eine DB -Operation innerhalb einer Transaktion stattfinden würde und nach dem Fehler (beispielsweise ein relationaler Einschränkungsfehler von ADO) eine Nachricht an das Protokoll schreiben würde ... nur um sie zusammen mit der Haupttransaktion zurückzurollen. Das ist die Art von Problem, in die Sie sich einlassen können, wenn Sie als Teil Ihrer Ausnahmebehandlungsstrategie direkt in die Datenbank schreiben.

Wie auch immer, ich bin mir nicht sicher, ob dies Ihre Frage beantwortet. Hier ist Ein guter Überblick darüber, wie dies alles in Entlib funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top