Hallo zusammen,
ich habe einen .NET Webservice geschrieben, der folgende Methode implementiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| [WebMethod] [SoapInclude(typeof(MdbPropertyOfNullableInt32)), SoapInclude(typeof(MdbPropertyOfString))] public MdbGetObjectListReply GetObjectList(MdbGetObjectListRequest getObjectListRequest) { if (getObjectListRequest.Application.ApplicationId == 0 || getObjectListRequest.ObjectName == null || getObjectListRequest.Schema.SchemaId == 0 || getObjectListRequest.ServerInfo == null) throw new WsiException("Mandatory properties are not filled."); else { MdbGetObjectListReply objectListReply = new MdbGetObjectListReply(getObjectListRequest.ServerInfo); objectListReply.ObjectList = conn.GetObjectList(getObjectListRequest.Application, getObjectListRequest.Schema, getObjectListRequest.ObjectName, ticket.UserId); return objectListReply; } } |
Nun wird im "objectListReply" eine Liste vom Typ "MdbProperty" zurückgegeben. Von "MdbProperty" wird "MdbPropertyOfNullableInt32" und "MdbPropertyOfString" abgeleitet. Das passiert alles in der 78sten DLL irgendwo im Backend. Nun erhalte ich immer die Fehlermeldung auf dem Client:
Quelltext
1:
| System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type Tooma.Provider.Db.dbobjects.MdbPropertyOfNullableInt32 was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically. |
Gut, das würde ja auch irgendwie Sinn machen, woher soll die WSDL auch von den beiden abgeleiteten Objekten wissen. Allerdings ändert sich auch nichts, wenn ich den Eintrag
C#-Quelltext
1:
| [SoapInclude(typeof(MdbPropertyOfNullableInt32)), SoapInclude(typeof(MdbPropertyOfString))] |
über der Methode GetObjectList aufnehme. Ich dachte, dass dann automatisch diese beiden Typen in der WSDL aufgenommen werden.
Die einzige Chance, mich irgendwie daran vorbeizuhangeln, ist die WSDL zu zwingen die beiden Typen aufzunehmen in dem ich irgendwelche Dummy Methoden in den Webservice baue, die einfach mal einen leeren "MdbPropertyOfNullableInt32" und "MdbPropertyOfString" zurückgeben. Aber das kann ja keine dauerhafte Lösung sein. Irgendwelche Hinweise, was ich da noch falsch mache?
gruss Dave