Klassenhirarchie in WSDL

23/12/2008 - 10:03 von Markus Nöbauer | Report spam
Ich habe ein Web Service geschrieben. Das Web Service hat eine Methode die
als Parameter eine Klasse A braucht. Die Klasse A hat ein Property vom Type
der Klasse B. Klasse B hat ein Feld X. Das funktioniert und passt soweit.

[WebService]
public class Service
{
[WebMethod]
public void Foo(A a) { // do stuff }
}

public class A
{
public B b;
}

public class B
{
public int x;
}

Am Client generiert die Entwicklungsumgebung wieder Proxy Klassen aus dem
WSDL File und man kann folgendes programmieren:
Service service = new Service();
A a = new A();
B b = new B(),
b.x = 42;
a.b = b;
service.Foo(a);

Für eine weitere Anwendung soll ich das Service anpassen. In der zweiten
Anwendung hat die Klasse B ein zusàtzliches Feld Y. Ich habe als eine Klasse
C geschrieben die von B erbt und ein Feld Y hat. Das funktioniert solange
gut, als ich die Klassenhirarchie in meiner Applikation verwenden

public class C : B
{
public int y;
}

Wenn ich jetzt das Service wieder publiziere und mir die WSDL Datei ansehe
ist die Klasse C nicht in den Typen gelistet. Das ist ja soweit korrekt weil
sich die Schnittstelle des Service nicht geàndert hat. Ich möchte aber dem
Benutzer die Möglichkeit geben die Methode Foo() sowohl mit einem Objekt des
Typs B als auch C aufzurufen. Dazu muss C irgendwie in der WSDL Datei
deklariert werden.

Lokal funktioniert das so:
Service service = new Service();
A a = new A();
C c = new C();
c.x = 42;
c.y = 21;
a.b = c; // geht weil C von B erbt und daher auch ein B ist (Polymorphism)
service.Foo(a);

Aber am remote Client hab ich kein C !
Service service = new Service();
A a = new A();
C c; // ist nicht in der WSDL Datei deklariert :P
 

Lesen sie die antworten

#1 Frank Dzaebel
23/12/2008 - 19:30 | Warnen spam
Hallo Markus,

Für eine weitere Anwendung soll ich das Service anpassen. In der
zweiten Anwendung hat die Klasse B ein zusàtzliches Feld Y. Ich habe
als eine Klasse C geschrieben die von B erbt und ein Feld Y hat. Das
funktioniert solange gut, als ich die Klassenhirarchie in meiner
Applikation verwenden [...] aber nicht im WSDL ...



Füge folgendes Attribut vor die Foo-Methode:

[XmlInclude(typeof(C))]
public int Foo(A a)


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen