Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi D8 + SOAP-Service + komplexer Response (https://www.delphipraxis.net/18050-d8-soap-service-komplexer-response.html)

r_kerber 13. Mär 2004 15:23


D8 + SOAP-Service + komplexer Response
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz