Entwickler-Ecke

Internet / Netzwerk - WebService via SOAP liefert nur halbe Bildaten


OlafSt - Mo 09.10.17 14:18
Titel: WebService via SOAP liefert nur halbe Bildaten
Hallo Freunde,

ich habe hier ein merkwürdiges Problem. Ich verbinde mich mit einem Webservice via SOAP (kein REST). Ich rufe dann dort eine Routine auf, die mir ein JPG zurückgeben soll.

Allerdings kommt nur ein kurzes Stück des JPG hier an. Es sollten 16KB sein, werden aber nur 7. Was mache ich in den 5 Zeilen falsch ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.GetFoto(SDAWNummer: string; Stelle: integer);
var
   Soap: KR_BilderServerSOAP.ImageDBWSSoap;
   BildUID: string;
   B: TDynByteArray;
begin
     //Startet einen SOAP-Client, der das Foto als ByteArray zurückgibt
     //Wir schieben dieses Array in einen MemoryStream, aus dem wir
     //dann das Image herausfischen

     //Zum Testen: SDAW = 0730000001001, Stelle = 1
     Soap:=KR_BilderServerSOAP.GetImageDBWSSoap(true);  //Interface, darum kein Free
     BildUID:=Soap.FindFirstImageByCriteria(SDAWNummer, IntToStr(Stelle));
     B:=Soap.Image_Load(BildUID, 2600);
     //Das DynArray lade ich in einen TMemoryStream um, anschließend TImage.LoadFromStream(MemoryStream).
     //Egebnis: JPEG-Error #53, File corrupt. Es fehlt die Hälfte der Billdaten
end;


WSDL: http://plakatonline.eshamburg.de/ImageDBView/ImageDBWS.asmx?wdsl

Bin absolut ratlos :cry:


Sinspin - Mo 09.10.17 14:44

Hey,

das wirkt als wäre da irgend ein Puffer zu klein geraten.
Schau mal in die generierte tlb zur wsdl ob da Warnungen zu erzeugten Typen enthalten sind.
Ansonsten versuch mal manuell einen Aufruf via Browser auszuführen und schau was an xml Daten geliefert wird.
Die Daten werden ja meißtens Base64 codiert, es sollte also 1/3 mehr sein als die erwartet Größe. Dann weist Du zumindest ob alles kommt.

€: Was passiert eigentlich wenn man den dritten Parameter in Image_Load nicht null lässt?


OlafSt - Mo 09.10.17 14:52

In der Delphi-Codedatei findet sich folgendes:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  // ************************************************************************ //
  // Die folgenden Typen, auf die im WSDL-Dokument Bezug genommen wird, sind in dieser Datei
  // nicht repräsentiert. Sie sind entweder Aliase[@] anderer repräsentierter Typen oder auf sie wurde Bezug genommen,
  // aber sie sind in diesem Dokument nicht[!] deklariert. Die Typen aus letzterer Kategorie
  // sind in der Regel vordefinierten/bekannten XML- oder Embarcadero-Typen zugeordnet; sie könnten aber auf 
  // ein inkorrektes WSDL-Dokument hinweisen, das einen Schematyp nicht deklariert oder importiert hat.
  // ************************************************************************ //
  // !:dateTime        - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:base64Binary    - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:int             - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:string          - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:boolean         - "http://www.w3.org/2001/XMLSchema"[Gbl]


Hab aber keinen Schimmer, was ich damit anfangen soll, geschweige denn wie ich das Problem lösen soll.


Sinspin - Mo 09.10.17 15:24

Sowohl die wsdl als auch die erzeugte tlb sieht bei mir nicht schlecht aus.
Die Warnungen sind, glaube ich, nur Hinweise das einige Typen nicht eindeutig in ihrem Typ referenziert wurden und so einfach mit ihrem Namen lokal aufgelößt wurden. Scheint aber in allen Fällen geklapt zu haben. Es wird ja für "base64Binary" nach "TByteDynArray" übersetzt.

Muss aber nichts heißen, die einzige plausibele Erklärung ist für mich aktuell das entweder die Daten schon verstümmelt kommen oder beim auspacken was drauf geht.
Es gibt irgendwo in der Seifenkiste ein Ereignis mit dem man die Orginaldaten bekommen kann die geliefert werden. Die am besten mal anschauen.

€: Seife -> THTTPRIO.OnAfterExecute.


OlafSt - Mo 09.10.17 16:14

OnAfterExecute hatte ich auch schon ermittelt.

Folgendes XML kommt zurück:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <Image_LoadResponse xmlns="http://tempuri.org/">
      <Image_LoadResult>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QwooooAKKKKACiiigAooooAKKKKACiiigAooooAkhhM2/DKoQZJY8U57aVWCgb9w3ApyCKW3kjRZlkLASJtyozjmp1uoFAQeZtRQFJHXnJyM11U6dKUVzOz/AK/Q55zqKTsrlMRuwJCMQvXA6U+KEyh23oqoASWNWheRbpC2/azswXHPPoc8VDazrCsoZmUuAAyjOOaFTpKa9661/wCAHPUcXpZ6DGtnViCy8AEEHgg9KFtZWnMQXJDbS2OAfrU73cbF/vnKoNxHLEHOaeL2LzVcmRdsjMAB94H1q/ZYdy+L+r/5E+0rJbf1YqRQPNv24AQZYmkSCR3jXaV3nClhgGnQzCNJhz864GPXNW2v4jKrjdjeGK7emB65qKdOjKKcnZ9fv/r7ypzqptRVymLeQsVKlSFLfMMZApHgkjkWN12s2MZ96nW6XygGLFgsgz/vdKZNMsk8UgLHaF3A9sUpQpKN09dBqVTms1oRtDIpcbSQhwzAcUGB94VQXOAflB4zVw30e1sbgcuR8uc5/GmfaomUqWkThDuUc/KOlW6NHpL+v60JVSr1iVngkR5F2lthwxUZAppRlAJUgHoSOtXzfRncRuU7mYfLnOfxqpcTeaYwCdqIFwfXvUVadKKbjK5VOdRu0lYhooormNwooooAKKKKACiiigAooooAKKKKACiiigAooooAhf77fWih/vt9aKYiYdB9KKB0H0opDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCF/vt9aKH++31opiJh0H0ooHQfSikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIX++31oof77fWimImHQfSigdB9KKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAhf77fWih/vt9aKYiYdB9KKB0H0opDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCF/vt9aKH++31opiH+YcDgdBR5h9BRRSGHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAB5h9BR5h9BRRQAeYfQUeYfQUUUAHmH0FHmH0FFFAETud7cDrRRRTEf/Z
      </Image_LoadResult>
    </Image_LoadResponse>
  </soap:Body>
</soap:Envelope>


Um jetzt an das Mime-Encodete Bild heranzukommen, verwende ich folgenden Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.AfterExecute(const MethodName: string; SOAPResponse: TStream);
var
   s: string;
   SS: TStringStream;
   P: TIdDecoderMIME;
   f: TEXTFILE;
   B: TIdBytes;
   T: TMemoryStream;
   doc: IXMLDocument;
   node: IXMLNode;
begin
     if Uppercase(MethodName) = 'IMAGE_LOAD' then
     begin
          SS := TStringStream.Create('');
          P:=TIdDecoderMIME.Create(nil);
          T:=TMemoryStream.Create;
          try
             SS.CopyFrom(SOAPResponse, 0);  // No need to position at 0 nor provide size
             s := SS.DataString;
             doc:=LoadXMLData(s);
             //node:=doc.DocumentElement.ChildNodes.Nodes['Image_LoadResponse'];
             node:=doc.DocumentElement.ChildNodes.Nodes['soap:Envelope'];
             node:=node.ChildNodes.Nodes['soap:Body'];
             node:=node.ChildNodes.Nodes['Image_LoadResponse'];
             node:=node.ChildNodes.Nodes['Image_LoadResult'];

             s:=node.LocalName;
             s:=node.Text;     //HIER IST NIX DRIN ?!?!??!
             exit; 

             B:=P.DecodeBytes(s);
             T.Write(B[0], Length(B));
             T.Position:=0;
             Image1.Picture.LoadFromStream(T);
          finally
             SS.Free;
             T.Free;
             P.Free;
          end;
     end
end;


Eigentlich sollte ich, nachdem ich mich durch das XML von Node zu Node gehangelt habe, in node.Text mein BASE64-Encoded Binärkrams haben, der das Bild repräsentiert. Nur ist node.Text leer. node.LocalName ist übrigens "Image_LoadResult".

Ich kapier das alles nicht mehr.


Sinspin - Mo 09.10.17 18:00

Wenn ich das richtig sehe ist das ein denkbar blödes Testbild. Zum Glück ist meine Testseite english. Da sollte dann nix auf deutsch kommen.
Also geliefert wird ein Bild. Ob vollständig oder nicht kann ich nicht bewerten da FF auf dann was anzeigt wenn ich das kodierte Bild verstümmele.

Ich habe gleich den ersten Google Treffer bei Suche nach "base64 decode image" verwendet um das bild zu visualisieren.

xml: Ich verwende immer eine bisschen andere Methode. Interessanterweise bekomme ich aber auch mit der die Daten nicht raus, sondern immer einen Fehler. Aber noch gebe ich nicht auf ;-)

€: Jetzt habe ich das gleiche Problem, keine Daten vorhanden. Interessant. Ich hatte so einen Fall vor einigen Jahren einmal. Muss mal sehen wie ich das gelößt habe.


Sinspin - Mo 09.10.17 18:57

Geschafft.
Habe mit ner Kanone auf ne Ameise geballert und nen Regenbogen bekommen.

Ich verwende msxml2. Sollte registriert sein, musste dir ne tlb für erzeugen.
Zum Decodieren von Base64 verwende ich die unit "encddecd" ist seit mindestens EX2 vorhanden und hat nicht zig Warnungen im Quelltext.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
var
   XMLDoc: IXMLDOMDocument;
   sl: TStringList;
   s: string;
   T: TStringStream;

begin
  CoInitialize(nil);

  sl := TStringList.Create;
  T := TStringStream.Create('');
  try
    sl.LoadFromFile('C:\Users\Public\wsdl_test.txt');

    XMLDoc := CreateOleObject('Microsoft.XMLDOM'as IXMLDomDocument;
    XMLDoc.LoadXML(sl.Text);
    s := XMLDoc.documentElement.selectSingleNode('./soap:Body/Image_LoadResponse/Image_LoadResult').text;
    if s <> '' then
    begin
      s := DecodeString(s);
      T.WriteString(s);
      T.Position := 0;
      t.SaveToFile('C:\Users\Public\wsdl_test_pic.jpg');
      Image1.Picture.LoadFromFile('C:\Users\Public\wsdl_test_pic.jpg');
    end;
  finally
     T.Free;
     sl.Free;
  end;
  CoUninitialize;
end;


So ist zumindest der Beweis erbracht das ein vollständiges Bild geliefert wird. Warum es nun beim import via Soap nicht klappt steht auf einem anderen Blatt.


OlafSt - Di 10.10.17 10:29

Dies hat wunderbar funktioniert, @SinSpin. Tausend dank für deine Hilfe.

Die Unit EncdDecd hat etliches an deprecated drin, mit der Empfehlung doch bitte System.NetEncoding zu verwenden. Habe ich getan, geht genauso prima. Nun bekomme ich auch Bilder angezeigt.

Grazie Mille.