2009-06-03 16 views
9

Ich muss ein benutzerdefiniertes Objekt an einen Remote-Webdienst übergeben. Ich habe gelesen, dass es notwendig ist, ISerializable zu implementieren, aber ich habe das getan und ich stoße auf Schwierigkeiten. Was ist der richtige Weg in C#, um ein benutzerdefiniertes Objekt an eine Web-Service-Methode zu übergeben?C# .NET-Webdienste - Übergeben von benutzerdefinierten Objekten an einen Webdienst

+0

Es wäre besser, wenn Sie über die Schwierigkeiten, spezifisch sein könnten Sie stoßen. Was versuchst du wirklich zu tun? Vielleicht würden einige konkrete Beispiele helfen. Was meinst du mit "ein benutzerdefiniertes Objekt übergeben"? das könnte viele Dinge bedeuten. Einige Besonderheiten werden helfen. – Cheeso

Antwort

6

Die Objekte, die Sie als Argument im Rahmen der Dienstanforderung liefern muss mit [Serializable] markiert werden und basierend auf einige der Antworten gepostet vor meiner müssen Sie auch sicherstellen, dass Ihr benutzerdefiniertes Objekt keine Parameter im Konstruktor enthält.

Denken Sie auch daran, dass jede Logik in Ihrer Klasse nicht in der Proxy-Klasse erstellt wird, die auf der Clientseite erstellt wird. Alles, was Sie auf der Clientseite sehen, ist ein Standardkonstruktor und Eigenschaften. Wenn Sie also Methoden zu Ihren benutzerdefinierten Objekten hinzufügen, beachten Sie, dass der Client sie nicht sehen oder verwenden kann.

Das gleiche gilt für jede Logik, die Sie in eine der Eigenschaften einfügen könnten.

Beispiel

[Serializable] 
public class Customer 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
+4

Jim, tut mir leid, aber [Serializable] hat nichts mit Webservices zu tun. –

+0

@ John: Warum nicht?Benutzt der XmlSerializer nicht auch das Attribut [Serializable]? – fretje

+0

Beispiel hinzugefügt. Ich verwende das [Serializable] -Attribut die ganze Zeit, wenn ein benutzerdefiniertes Objekt serialisiert werden muss. –

0

Edit: entfernt den Teil über [Serializable]

Sind Sie den Dienst zu schaffen, oder es raubend?

Um ein Objekt zu erstellen, das als Parameter einer Webmethode übergeben werden kann, müssen Sie nichts Besonderes tun. Das heißt, wenn Sie einen asmx-Webservice erstellen.

OTOH, Wenn Sie einen WCF-Dienst erstellen, müssen Sie die Klasse mit [DataContract] und allen Mitgliedern, die mit [DataMember] serialisiert werden sollen, markieren.

Wenn Sie den Webservice konsumieren, sollten die Proxyklassen für das zu übergebende Objekt generiert werden, wenn Sie die Servicereferenz hinzufügen. Sie müssen sie nur benutzen.

+0

Eigentlich mache und konsumiere ich beide. Was Sie hier erwähnt haben, ist, was ich getan habe, aber ich bekomme immer wieder Beschwerden von VS über die Notwendigkeit eines parameterlosen Konstruktors in dem benutzerdefinierten Objekt (das ich hinzugefügt habe, aber ohne Erfolg.). –

+0

können Sie dann den entsprechenden Code und genaue * Beschwerden * angeben ;-) – fretje

5

Sieht aus wie ein Duplikat dieser question

Wie auch immer, alle Objekte in WS-Wechselwirkungen beteiligt sind, sollten XML-serialisierbar sein, nicht ISerializable (die binäre Serialisierung ist). Außerdem sollten sie im Servicevertrag (WSDL) beschrieben werden, sonst können Kunden sie nicht konsumieren. This article sollte nützlich sein, um XML-Serialisierung mit XML Web Services zu verstehen.

Allerdings, wenn Sie sprechen über wirklich benutzerdefinierte Objekte (d. H. Jeder Typ). Sie sollten in Betracht ziehen, sie in binärer Form zu übergeben: Entweder als Base64-Codierung oder als Anhang. Die Frage, die ich verlinkt habe, hat eine Antwort wie man das macht.

0

Schauen Sie sich die question zu sehen, wie die XML-Serialisierung implementieren für die benutzerdefinierten Objekte

Verwandte Themen