WCF-Dienste und-Objekt-Konstruktoren
Ich bin nur zu lernen, WCF-Dienste. Ich habe eine Methode, die ein Objekt zurückgibt, die ich erstellt namens GPSPosition. Eine GPS-Position Objekt hat einen Breitengrad und einen Längengrad. Das Objekt sollte nie wirklich existieren, ohne diese Eigenschaften.. Also, ich möchte den Konstruktor akzeptieren Sie die Lat-und Long-floats. Also wenn das Objekt erstellt wird, werden die Werte festgelegt, und kann nie ungültig werden (Unset).
Aber, es ist ein Objekt von meinem WCF-service. Kann als WCF-service-Objekt, dass meine aufrufende Anwendung verwendet, haben Sie einen Konstruktor? Wenn ich var position = new GpsPosition{ lat=1, lon=1 };
in meiner aufrufenden code, wird der Konstruktor der Arbeit? Können Sie Konstruktoren in der WCF-Klassen?
Ich dachte, Sie sind geteilt, zwischen den verschiedenen Sprachen - so, wenn der service wird von Java, zum Beispiel, ich bin mir nicht sicher, wie der Konstruktor wird Feuer. Das Objekt Struktur gemeinsam an die aufrufende app, nicht? Können Sie das Feuer .net-code in den Konstruktor Und getter-und setter-Methoden, für diesen Fall)?
Und wenn der Konstruktor ist nicht nutzbar - gibt es eine Möglichkeit sicherzustellen, dass mein Objekt ist nie ungültig? (Muss gültig lat/long-Werte zwischen -180 und +180)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort wird davon abhängen, welche Serialisierung Modell Ihrer Art
GpsPosition
verwendet. Die zwei häufigsten verwendet in WCF sind von POCO (plain old CLR object) und[DataContract]
. In der ehemaligen, das Objekt muss über einen parameterlosen Konstruktor, die sich gegen Ihre Forderung (dass die Werte eingestellt werden müssen, um einmal). Im letzteren, dem object-Konstruktor wird nicht aufgerufen - statt ein nicht initialisierter Instanz des Typs erstellt, und Ihre Mitglieder sind über Deserialisierung.So Konstruktoren sind keine alternative zum validieren der Objekte aus dem Draht. Was Sie brauchen, um zu überprüfen das Objekt, statt der Konstruktor ist eine Serialisierung Rückruf, die aufgerufen wird, sobald die Deserialisierung abgeschlossen ist. Die WCF-serializer ruft Sie, wenn die Deserialisierung erfolgt, und es können Sie überprüfen, ob das Objekt wurde korrekt initialisiert, und wirft andernfalls eine exception. Diese blog-post hat weitere details zur Serialisierung Rückrufe, und der folgende code zeigt eine mögliche Implementierung für Ihr Szenario.