Ich baue gerade eine neue Version von Webservice, die meine Firma bereits anbietet. Der aktuelle Webservice hat einen Eingabeparameter vom Typ string. In dieser Zeichenfolge wird ein vollständiges XML-Dokument übergeben. Wir validieren diese Zeichenfolge dann gegen ein xsd (das gleiche xsd, das dem Konsumenten gegeben wird). Es sieht ungefähr so aus:Was ist der richtige Weg, um Eingabeparameter mit komplexen Typen für einen C# .net 2.0 WebService zu codieren?
[WebMethod]
public bool Upload(string xml)
{
if (ValidateXML(xml))
{
//Do something
}
}
Ich baue die nächste Version dieses Dienstes. Ich hatte den Eindruck, dass die Übergabe eines XML-Dokuments als String nicht der richtige Weg ist. Ich dachte, dass mein Dienst wie folgt aussehen würde:
[WebMethod]
public bool Upload(int referenceID, string referenceName, //etc...)
{
//Do something
}
Dieses Problem, das ich habe ist, dass in Wirklichkeit eine große Menge an Eingangsparameter sind und einige von ihnen sind komplexe Typen. Zum Beispiel muss die Upload-Methode ein komplexes Objekt namens "Zuweisung" aufnehmen. Dieses Objekt besteht tatsächlich aus mehreren Ganzzahlen, Dezimalwerten, Strings und anderen komplexen Objekten. Sollte ich den Webservice wie folgt aufbauen:
Oder gibt es einen anderen Weg, dies zu tun?
Hinweis: Dieses Zuweisungsobjekt hat eine Hierarchie in der xsd, die für den alten Dienst bereitgestellt wurde.
Könnte es sein, dass der ursprüngliche Dienst nur XML zur Bekämpfung dieses Problems verwendet hat? Gibt es eine bessere Möglichkeit, komplexe Typen in einen Webservice einzubinden?
Hinweis: Dies ist ein C# 2.0 Webservice.
Spielt es eine Rolle, dass ich nicht weiß, welche Programmiersprache der Kunde benutzt? Ich habe einige Clients, die Java und andere .NET verwenden. – Jon
Solange * Ihr Code * einen bestimmten XML-Code erwartet, wird er als XML-String eingefügt, dann können Sie damit machen, was Sie wollen. d. h. Deserialisierung es zurück zu Ihrem Objekt. Wenn alle Ihre Kunden der von Ihnen bereitgestellten XSD folgen, ist das kein Problem. –
Ja, stellen Sie Ihren Kunden WSDL und XSD zur Verfügung und parsen Sie die XML nicht selbst! LINQ to XML ist hier definitiv ein Overkill (und nicht in .NET 2.0 verfügbar). Das (De-) Serialisieren von Objekten wie Antwort- und Anforderungsklassen für die Webmethoden in der ursprünglichen Frage sollte nicht mehr als das Anwenden von Attributen wie * [XmlRoot] *, * [XmlElement] * und * [XmlArrayItem] * an den richtigen Stellen erfordern. – azheglov