Einzelnen Beitrag anzeigen

Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

D8 + SOAP-Service + komplexer Response

  Alt 13. Mär 2004, 15:23
Hallo,

ich schreibe zur Zeit mit Delphi 8 einen WebService, der mir Datenbank-Funktionalität über's Internet zur Verfügung stellen soll. Eine Methode soll z.B das Ergebnis eines SQL-Selects zurückliefern. Es ist kein Problem, eine Spalte als Rückgabewert der Funktion zurückzugeben. Das funktioniert auch wenn die Antwortmenge aus mehreren Zeilen besteht. Die Funktion ist dann vom Typ ArrayList:
Delphi-Quellcode:
function TwsArbeit.get_projekte(us, pw: &String): ArrayList;
var
  i: Integer;
  al: ArrayList;
begin

...

  if ds_104005_db1.Tables['projekte'].Rows.Count > 0 then
  begin
    al := ArrayList.Create;
    for i := 1 to ds_104005_db1.Tables['projekte'].Rows.Count do
    begin
      al.Add(ds_104005_db1.Tables['projekte'].Rows.
        Item[i-1]['prj_name'].ToString)
    end;
  end;
  Result := al;
end;
Nun soll aber nicht nur eine Tabellen-Spalte sondern mehrere Spalten als Result zurückgeliefert werden. Ich habe nun versucht anstelle eines Strings ein Object in die ArrayList einzufügen. Das geht auch, allerdings klappt des Versenden des Response an den Client nicht:
Ich erhalte folgende Fehlermeldung
System.InvalidOperationException: Beim Generieren des XML-Dokuments ist ein Fehler aufgetreten. ---> System.InvalidOperationException: Der Typ arbeitszeit.TArbeitszeitDaten wurde nicht erwartet. Verwenden Sie das XmlInclude- oder das SoapInclude-Attribut, um Typen anzugeben, die nicht statisch sind.
at System.Xml.Serialization.XmlSerializationWriter.Wr iteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationWriter1.Write12_ArrayOfAnyType(Object o)
--- Ende der internen Ausnahmestapelüberwachung ---
at System.Xml.Serialization.XmlSerializer.Serialize(X mlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
at System.Xml.Serialization.XmlSerializer.Serialize(X mlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(T extWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(T extWriter textWriter, Object o)
at System.Web.Services.Protocols.XmlReturnWriter.Writ e(HttpResponse response, Stream outputStream, Object returnValue)
at System.Web.Services.Protocols.HttpServerProtocol.W riteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.Wr iteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.In voke()
Hat jemand eine Idee?
  Mit Zitat antworten Zitat