Frage
Gibt es eine Möglichkeit, wenn Web-Service zu schaffen, die Arten angeben zu benutzen? Insbesondere möchte ich beide die gleiche Art zu verwenden, um der Lage sein, auf dem Client und Server Duplizierung von Code zu reduzieren.
über vereinfachtes Beispiel:
public class Name
{
public string FirstName {get; set;}
public string Surname { get; set; }
public override string ToString()
{
return string.Concat(FirstName, " ", Surname);
}
}
Ich will nicht recode Stücke Funktionalität in meiner Klasse haben. Die andere Sache ist, dass jeder Code, der diese manipuliert diese Klasse existiert nicht Client-Seite als die Client-Seite-Klasse arbeiten, die erzeugt wird, eine andere Art sein würde.
Lösung
Okay, ich sehe, weiß, dass dies auf Seiten der SOAP eine explizite Design-Entscheidung gewesen ist, so dass Sie nicht wirklich auf das soll. Ich fand das folgende , die erklärt, warum:
Dienstleistungen Aktien Schema und Vertrag, nicht Klasse . Services interagieren ausschließlich auf ihre Expression von Strukturen durch Schemata und Verhaltensweisen durch Verträge. Die Service-Vertrag beschreibt die Struktur von Nachrichten und Ordnungsbeschränkungen über Mitteilungen. Die Förmlichkeit der Ausdruck ermöglicht Maschine Überprüfung von eingehenden Nachrichten. Maschine Überprüfung der eingehenden Nachrichten Damit können Sie den Dienst des schützen Integrität. Verträge und Schemata müssen bleiben über längere Zeit stabil, so Gebäude sie flexibel ist wichtig.
Nachdem das nun gesagt, dass es zwei weitere Möglichkeiten:
- Generieren Sie die die Web-Verweise in Visual Studio oder mit wsdl.exe. Gehen Sie dann in die generierten Reference.cs (oder .vb) Datei und den Typ explizit löschen. Dann Umleitung auf die Art, die Sie mögen, dass in einer anderen Baugruppe befindet.
- Sie können Typen zwischen Web-Services auf der Client-Seite von wsdl.exe teilen und / share Parameter.
Andere Tipps
Wenn Sie eine Art oder Struktur zwischen Ihrem Web-Service geteilt haben wollen und Ihren Kunden, fügen Sie eine öffentliche Struktur, um Ihre Web-Service-Projekt wie folgt:
public struct Whatever
{
public string A;
public int B;
}
dann eine Methode, um Ihren Web-Service hinzufügen, die diese Struktur als Rückgabetyp hat:
[WebMethod]
public Whatever GiveMeWhatever()
{
Whatever what = new Whatever();
what.A = "A";
what.B = 42;
return what;
}
Nachdem Sie Ihre Kunden Web-Referenz aktualisieren, werden Sie in der Lage sein structs von Art zu schaffen, was in Ihrer Client-Anwendung wie folgt:
Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND
Diese Technik ermöglicht die Definition von irgendwelchen Strukturen, die Sie an einem Ort hin und her übergeben müssen halten (das Web-Service-Projekt).