2008-09-02 12 views
9

Wie strukturieren Sie bei der Codierung von Web-Services Ihre Rückgabewerte? Wie gehen Sie mit Fehlerbedingungen um (erwartete und unerwartete)? Wenn Sie etwas Einfaches wie ein Int zurückgeben, geben Sie es einfach zurück oder betten Sie es in ein komplexeres Objekt ein? Enthalten alle Webmethoden innerhalb eines Service eine Instanz einer einzelnen Klasse oder erstellen Sie eine benutzerdefinierte Rückgabewertklasse für jede Methode?Was ist ein gutes Entwurfsmuster für die Rückgabewerte von Webmethoden?

Antwort

8

Ich mag das Request/Response-Objektmuster, in dem Sie Ihre Argumente in eine einzelne [Operation] Request-Klasse kapseln, die einfache öffentliche Eigenschaften enthält.

Etwas wie AddCustomerRequest, die AddCustomerResponse zurückgeben würde.

Die Antwort kann Informationen über den Erfolg/Fehlschlag der Operation enthalten, alle Nachrichten, die möglicherweise von der Benutzeroberfläche verwendet werden, z. B. die ID des hinzugefügten Kunden.

Ein anderes gutes Muster besteht darin, diese alle von einer einfachen IMessage-Schnittstelle abzuleiten, wo Ihr allgemeiner Endpunkt etwas wie Process (params IMessage [] - Nachrichten) ist ... auf diese Weise können Sie mehrere Operationen in derselben übergeben Webanfrage.

1

+1 für Bens Antwort.

Darüber hinaus schlage ich vor zu berücksichtigen, dass die generische Antwort mehrere Fehler/Warnung Elemente erlauben, um die Antwort so umfassend und umsetzbar wie möglich zu ermöglichen. (Möchten Sie einen Compiler verwenden, der nach der ersten Fehlermeldung gestoppt wurde oder der Ihnen so viel wie möglich angezeigt hat?)

1

Wenn Sie SOAP-Webdienste verwenden, sind SOAP faults die Standardmethode zum Zurückgeben von Fehlerdetails. wo die Fehlermeldungen jedes Detail zurückgeben können, das Sie mögen.

0

Soap-Fehler sind eine Standardmethode, bei der die aufrufende Anwendung ein Soap-Client ist. Es gibt Fälle, wie ein COM-Client, der XMLHTTP verwendet, bei dem die Soap als XML analysiert wird und Soap-Fehler nicht einfach behandelt werden können. Kann noch nicht abstimmen aber noch +1 für @Ben Scheirman.

Verwandte Themen