2009-08-20 4 views
2

Ich habe einige WCF-Dienste (gehostet in IIS 6), die den Enterprise Library (4.0) Validation Application Block verwenden. Wenn ein Client eine Nachricht übergibt, die die Validierung nicht besteht (d. H. In eine Ausnahme ValidationFault zurückgeworfen wird), würde ich gerne die XML-Nachricht irgendwo protokollieren können (mit Code, keine IIS-Protokolle). Die gesamte Validierung findet statt, bevor der Service-Implementierungscode einsetzt.WCF mit Enterprise Library Validierung Application Block - Wie bekomme ich ungültige Nachrichten?

Ich bin mir sicher, dass es möglich ist, eine Klasse einzurichten, die vor der Service-Implementierung ausgeführt wird (vermutlich funktioniert der Validation Application Block), aber ich kann ' Erinnere dich nicht daran, oder finde heraus, wonach genau gesucht werden soll.

Ist es möglich, eine Klasse und eine zugehörige Konfiguration zu erstellen, die mir Zugriff auf die gesamte SOAP-Anforderungsnachricht oder zumindest auf den Nachrichtentext gewährt?

Antwort

0

Ich fand eine blog post die scheint zu tun, was ich will - Sie erstellen eine Klasse, die IDispatchMessageInspector implementiert. In der AfterReceiveRequest-Methode haben Sie Zugriff auf die gesamte eingehende Nachricht und können sich somit abmelden. Dies geschieht nach der Authentifizierung, so haben Sie auch Zugriff auf den Benutzernamen - praktisch für die Protokollierung. Sie können unterstützende Klassen erstellen, mit denen Sie dieses Verhalten Services über Attribute und/oder Konfiguration zuweisen können.

IDispatchMessageInspector gibt Ihnen auch eine BeforeSendReply Methode, so dass Sie Ihre Antwortnachricht protokollieren (oder ändern) können.

Wenn Kunden nun versuchen, SOAP-Anforderungsnachrichten (nicht einmal irgendeine Art von DOM-Objekt) handschriftlich anzufertigen, haben wir leicht zugänglichen Beweis, dass sie Unsinn senden!

0

Sie konnten die ganze WCF Nachricht log:

http://msdn.microsoft.com/en-us/library/ms730064.aspx

Oder Sie es mit Enterprise Library Logging Application Block kombinieren könnte.

+0

Leider haben wir unsere eigene interne Protokollierungs-API, die ich gerne verwenden würde. Ich möchte wirklich nicht die Lösung mit mehr EntLib-Zeug aufblähen, ich brauche nur eine Art, in WCF einzuhaken und die Nachricht zu bekommen, bevor (oder vielleicht danach) die Validierung passiert. –

+0

Vielleicht überprüfe ich den EntLib-Quellcode ... –

1

Werfen Sie einen Blick über die Berechtigung Richtlinien Injection Application Block bei Verwendung ...

ich zur Zeit entwickle eine Anwendung, in der ich abfangen (mit PIAB) alle Anfragen eingehenden auf dem Server und auf der Grundlage der Art der Anfrage I Wenden Sie ein anderes Validierungsverhalten mit dem VAB an.

Hier ist ein Artikel über PIAB mit WCF Integration:

http://msdn.microsoft.com/en-us/magazine/cc136759.aspx

Sie verschiedene inteception Mechanismen schaffen können wie Attribute ausgesetzt Operationen angewandt.

Verwandte Themen