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
Antwort
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; }
}
Jim, tut mir leid, aber [Serializable] hat nichts mit Webservices zu tun. –
@ John: Warum nicht?Benutzt der XmlSerializer nicht auch das Attribut [Serializable]? – fretje
Beispiel hinzugefügt. Ich verwende das [Serializable] -Attribut die ganze Zeit, wenn ein benutzerdefiniertes Objekt serialisiert werden muss. –
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.
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.). –
können Sie dann den entsprechenden Code und genaue * Beschwerden * angeben ;-) – fretje
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.
Schauen Sie sich die question zu sehen, wie die XML-Serialisierung implementieren für die benutzerdefinierten Objekte
- 1. Übergeben von Parametern an einen JSON-Webdienst in Objective C
- 2. Wie Übergeben von Benutzeranmeldeinformationen an den Webdienst?
- 3. Übergeben von benutzerdefinierten Objekten vom Servlet an JSP
- 4. Wie Übergeben von Anmeldeinformationen an einen SOAP-Webdienst?
- 5. Übergeben von Daten an einen benutzerdefinierten Adapter von asyncTask
- 6. So übergeben Sie aufgezählte Werte an einen Webdienst
- 7. Speicherverwaltung von SWIG generierten Objekten übergeben an C
- 8. Vergleichen von 2 benutzerdefinierten Objekten - C#
- 9. Übergeben von benutzerdefinierten Argumenten an Sidekiq
- 10. Gruppierung von benutzerdefinierten Objekten in Objective-C
- 11. NULL an einen Strukturzeiger in C übergeben?
- 12. Serialisierung von benutzerdefinierten Objekten
- 13. Übergeben von Datensätzen an einen Dialog
- 14. Übergeben eines Safearray von benutzerdefinierten Typen von C++ zu C#
- 15. Kann ich Argumente an einen benutzerdefinierten log4net Appender-Konstruktor übergeben?
- 16. Übergeben von FormsAuthentication-Cookie an einen WCF-Dienst
- 17. Übergeben einer benutzerdefinierten Methode an den Konstruktor
- 18. BlazeDS und ArrayList von benutzerdefinierten Objekten
- 19. Kann ich eine verknüpfte Liste von einem C# -Webdienst an eine JavaScript-Funktion übergeben?
- 20. C# -Client schreiben, um einen Java-Webdienst zu verwenden, der ein Array von Objekten zurückgibt
- 21. CodeCeption - Übergeben von Optionen an einen Helper
- 22. Übergeben von Werten an einen Controller
- 23. Weitergabe von C# -Array von COM-Objekten an VB6
- 24. Assembly - Übergeben von Parametern an einen Funktionsaufruf
- 25. Fehler beim Übergeben des Parameters an den Webdienst in Mule
- 26. Übergeben von Objekten und einer Liste von Objekten durch Verweis in C#
- 27. Zwei Objekte an einen TimerCallback übergeben
- 28. Ist es möglich, einen Boost shared_ptr von C++ an Python und zurück an C++ übergeben
- 29. Übergeben von benutzerdefinierten Typen an ein untergeordnetes swf in AS2
- 30. Übergeben von Eigenschaften an einen Spring-Kontext
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