2016-03-10 10 views
10

Nehmen wir an, ich eine Webservice haben, die auf allen Methoden eine Klasse zurückgibt, dem Kunden den Status des Prozesses zu informieren, zum Beispiel:Webservice Änderungsmethode Reaktion ohne vorherige Benachrichtigung Kunden

public class WsResult { 

    string result; // either "error" or "ok" 

} 

Jetzt möchten wir hinzufügen eine Eigenschaft für diese Klasse, ohne dass alle Clients gezwungen sind, unseren Service zu nutzen, um ihre Software zu aktualisieren. Ist das möglich?

Zum Beispiel:

public class WsResult { 

    public string result; // either "error" or "ok" 

    public Guid? someIdentifier; 

} 

Ich bin für Antworten auf beiden WCF und ASMX suchen.

+0

Ist das wcf oder asmx? –

+0

@ TomRedfern Ich möchte eine Antwort für beide, ich werde die Frage bearbeiten. – MeanGreen

Antwort

5

WCF

Es ist möglich. Sie können einfach eine neue Eigenschaft hinzufügen, und es funktioniert, vorausgesetzt, dass diese neue Eigenschaft nicht erforderlich ist. Für weitere Details siehe Punkt 8 von Best Practices: Data Contract Versioning Artikel.

Wenn Sie Round-Trip-Szenario behandeln müssen, sollten Sie über IExtensibleDataObject Schnittstelle lesen. Round-tripping tritt auf, wenn Daten von einem Server an einen Client gesendet werden und erwartet wird, dass sie zurückgesendet werden. Details finden Sie unter Forward-Compatible Data Contracts Artikel.

ASMX

Mit ASMX ist eine Situation, die gleiche. Sie können eine neue Eigenschaft hinzufügen und alle Clients sollten funktionieren. In diesem Fall können Sie auch die Schnittstelle IExtensibleDataObject verwenden.

Schlussbemerkungen

Diese Antwort basiert auf empirischen Tests mit VS 2015. Ich schlage vor, Sie stark die gleiche d.h zu tun .: schreiben einfache WCF/ASMX-Servern und -Clients und Verhalten von mir beschrieben überprüfen. Ich brauchte nur einige Minuten dafür. Oder noch besser, Sie können bereits vorhandene Dienste nutzen.

Ich empfehle zusätzliche Tests, weil Sie möglicherweise einige nicht standardmäßige Konfiguration verwenden, die das Standardverhalten von WCF/ASMX-Diensten ändert, so dass es besser ist, zu überprüfen. Ich bin mir dieser Konfiguration nicht bewusst, aber Sie wissen nie.

-1

Mit WCF können Sie tatsächlich verschiedene Klassen auf der Client- und Serverseite haben, was normalerweise auch passiert, wenn Sie die Service-Referenz UI verwenden. Der Trick, dies zu tun, besteht darin, den Namespace und den Namen auf das Attribut DataContract zu setzen (und vielleicht sogar den Namen auf dem DataMember Attribut, wenn die Mitgliedsnamen unterschiedlich sind).

Nur die Eigenschaften, die übereinstimmen, werden deserialisiert, da sich das Hinzufügen einer Eigenschaft auf der Serverseite nicht auf die Clientseite auswirkt.

Verwandte Themen