2009-05-03 19 views
3

Ich bin verwirrt darüber, wie ich Fehler an einen Client mit SOAP zurückgeben sollte.WCF Fehler mit SOAP

Ich habe einen WCF-Service, aber ich bin mir nicht sicher, welche Technologie der Client verwendet, also würde ich gerne die SOAP-Spezifikation bleiben.

Soweit ich gelesen habe, scheinen Fehlermeldungen der beste Weg, damit umzugehen.

ich meinen Dienst mit vielen verschiedenen möglichen Fehler sehen:

  • Null \ Datenfehler zu erwarten
  • Datenformatfehler (zB: db erlaubt nur 3 Zeichen)
  • Datenbereich Fehler „Kunde bereits Ihre Anfrage ‚Typfehler vorliegt“,‘Kann nicht

Wäre es richtig sein, ein neues Objekt für jeden dieser Fehler verarbeiten und als solche werfen zu erstellen:

Der Client übergibt große Objekte mit vielen Eigenschaften an praktisch jede Methode (dh: Kunde, Bestellung usw.).

Wäre dies der richtige Weg, Fehler zu behandeln und an den Client zurückzusenden?

Es scheint fehl am Platz zu sein, jeden Fehler zu den Attributen oberhalb der Methode hinzuzufügen.

IE:

[OperationContract] 
[FaultContract(typeof(NullFault))] 
[FaultContract(typeof(InvalidDataFault))] 
[FaultContract(typeof(ArguementFault))] 
[FaultContract(typeof(RangeFault))] 
void CreateCustomer(Customer customer); 

Auch was ist mit einem GenericFault? Wie würden Sie mit Geschäftsregelfehlern umgehen? zB: Kunde existiert bereits, zu viele Einzelposten, versenden nicht in diesen Bereich, Zahlungsart nicht akzeptiert, etc.?

Bitte lassen Sie mich wissen, ob diese Methode korrekt ist oder ob es eine andere akzeptierte Lösung gibt und wie Sie die "Geschäftsregel" -Situation behandeln würden.

Antwort

2

Einen Fehler zurückzugeben ist der richtige Weg, aber Sie sollten sich auch fragen, was das Client-Programm mit den Informationen tun wird, die Sie bei einem Fehler zurückgeben. Wenn der Kunde nur wissen muss, dass ein Fehler aufgetreten ist, benötigen Sie nur einen einzigen Fehler. Dieser Fehler könnte Nachrichtentext enthalten, den der Client seinem Benutzer anzeigen könnte.

Wenn der Client je nachdem, ob es sich um einen NullFault oder einen RangeFault handelt, unterschiedliche Aktionen ausführen muss, benötigen Sie separate Fehler. Aber wenn es keinen Unterschied zwischen ihnen gibt, dann rette dich selbst und der Client programmiert etwas Zeit und Mühe und definiert nur einen einzigen Fehler.

+0

Danke John für Ihre Antwort. I schnelle Followup-Frage: Wenn Sie mit dem einzigen Fehler Weg gehen würden, glauben Sie, es wäre eine gute Idee, eine Enum-Eigenschaft des Fehlertyps zu erstellen (dh: NullReference, Range, InvalidData, BusinessRule, Other)? Wissen Sie, ob diese Enum auch in der Soap-Nachricht übergeben werden? Danke, Steven – stevenrosscampbell

+0

Sie könnten eine solche Enum zurückgeben, aber denken Sie daran, dass Ihre Kunden diese Informationen betrachten und etwas damit tun müssen. Wenn sie mit den Informationen, die Sie ihnen schicken, nicht programmatisch vorgehen, senden Sie sie nicht. –

+0

Ja, ich stimme zu. Ich denke, alles, was ich tun kann, ist, ihnen davon zu erzählen und zu hoffen, dass sie es entsprechend benutzen. Danke, Steven – stevenrosscampbell