WCF-Anforderungsvalidierung mit XML

9

Ich habe einen WCF SOAP-Webdienst, der das .NET 4.0-Framework verwendet. Ich verwende contract first Ansatz - d. H., Service-Code wird aus handgeschriebenen WSDL mit WCSF Blue Tool generiert.

Ich habe folgende Anforderung bezüglich der Anforderungsnachricht.

  

Wenn der Preis kleiner als 100 ist, darf kein steuerliches Element vorhanden sein, aber wenn es größer als 100 ist, wird das Steuerelement benötigt.

In XPath ist der Ausdruck wie folgt

%Vor%

Ich kann damit im C # -Code des Dienstes umgehen. Aber ich möchte die Regel in der WSDL selbst definieren, indem ich irgendeine XML-Technologie verwende. Dies hilft dem Client zu wissen, was die Geschäftsvalidierung ist, die die Eingabenachricht erfüllen sollte. (Dies ist die Definition der Geschäftsregel, und ihre Implementierung findet in der WSDL selbst statt; andere Dokumentation muss nicht für den Client freigegeben werden.)

Was ist der beste Weg, um dies in WCF zu erreichen? Unter welchem ​​Abschnitt in WSDL kann ich den XML validations definieren, damit er von WCF verarbeitet wird?

In den ersten zwei Referenzen, die unten gegeben werden, gibt es einen Ansatz, der für XPath und C # Handler (für Web Services Framework) erwähnt wird. Können wir das nicht in WCF tun? Kann C # den XPath nicht von WSDL lesen? Wie es geht? Irgendwelche Referenzen?

Hinweis : Ich bin in Ordnung, wenn C # -Führer ausgeführt werden sollen. aber die business logic für validation sollte in XML

sein

Referenz

  1. Erweitern Sie das ASP.NET WebMethod Framework mit Validierung von Geschäftsregeln - von Aaron Skonnard und Dan Sullivan
  2. WS-Policy- und WSE 2.0-Assertion-Handler - von Aaron Skonnard
  3. Hartmut's Box - Die vier Grundsätze und XML Messaging mit WCF
  4. Nachrichtenüberprüfung mit Schema in WCF
  5. XML-Validierung mit Schematron / XSD in C #
  6. Definieren von XML in einem xsd wo ein Attribut den möglichen Inhalt bestimmt
Lijo 16.03.2013, 06:58
quelle

2 Antworten

1

Ich denke nicht, dass Sie dies in der WSDL selbst tun können, aber Sie könnten einen Handler einfügen, der die Überprüfung vor dem Versand Ihres Benutzercodes durchführt.

Es gibt einen Enterprise-Bibliothek-Block, der diese Art von Validierung verarbeiten kann, oder natürlich können Sie eigene erstellen und sie dem WCF-Stack hinzufügen.

    
Dave Bending 20.03.2013 09:44
quelle
1

Beginnen Sie mit einer einfachen Textbeschreibung der Regeln für Personen, die Ihren Dienst anrufen. Geben Sie jeder Regel ein Tag, damit auf sie leicht Bezug genommen werden kann.

Schreiben Sie Ihre Validierungsregeln in C # und rufen Sie sie in einem Handler zur Überprüfung von Nachrichten auf. Sie können weiterhin XQuery / XPath-Syntax und Konfigurationsdateien verwenden, um die Regeln zu implementieren, aber es wird ein Implementierungsdetail sein. Wenn sich einige der Regeln auf dieser Ebene als schwerfällig herausstellen, können Sie diese im Code hinzufügen. Wenn das Unternehmen eine Regelengine einführt, können Sie die Engine verwenden. Aber das passiert hinter der Schnittstelle des Dienstes. Wenn sich die Regeln ändern, bleibt die WSDL gleich.

Lassen Sie die Validierung das Tag der fehlgeschlagenen Regel sowie eine klare Meldung, die den Fehler beschreibt, angeben. Geben Sie Personen, die in Ihren Service integriert sind, Zugang zu einer Entwicklungsumgebung, in der sie mit dem Vertrag herumspielen können.

Zur Verwendung der XQuery-Style-Validierung:

Schematron ermöglicht es Ihnen, Regeln in XML zu definieren. Ein Schema besteht aus Phasen, Mustern, Regeln und Assertionen, aber im Grunde würde eine Ihrer Aussagen wie folgt aussehen:

%Vor%

Schematron stellt eine Reihe von XSLT-Transformationen bereit, die zuerst Ihr Schematron-Schema mit den Geschäftsregeln in eine andere XSLT-Transformation umwandeln. Diese generierte XSLT-Transformation wandelt dann die XML-Eingabe in eine Reihe von Validierungsnachrichten um, die ihre Gültigkeit beschreiben.

Aber der springende Punkt ist, dass es viele Möglichkeiten gibt, dies zu tun. Sie könnten die Assertions in einer Skriptsprache konfigurieren und das Skript dazu verwenden, die deserialisierten Parameter zu validieren.

%Vor%

Und Sie könnten die Implementierung ändern, wenn Sie herausfinden, dass eine andere Ihnen besser passt. Es würde weder die WSDL noch das Verhalten des Dienstes ändern.

    
flup 25.03.2013 08:48
quelle

Tags und Links