Delphi-PRAXiS
Seite 7 von 9   « Erste     567 89      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webservice (https://www.delphipraxis.net/196134-webservice.html)

mjustin 7. Mai 2018 11:06

AW: Webservice
 
Zitat:

Zitat von InschenierSB (Beitrag 1401499)
Nehme mal an dass das wieder an der steinalten Delphi-Version (6) liegt. Aber ich muss diese verwenden.

Die aktuelle Version 10.6.2 von Indy ist auch noch mit alten Delphi Versionen einsetzbar (bis zu Delphi 5).

Wenn die Komponenten im Code dynamisch erzeugt werden, spart man sich auch die Package-Installation und kann neue Projekte parallel mit der neuen Version entwickeln.

Elrond 7. Mai 2018 11:56

AW: Webservice
 
Zitat:

Zitat von InschenierSB (Beitrag 1401499)
Kein Thema Elrond,
habe e soweit schon hinbekommen. Was noch nicht so ganz klappt ist die Response auszugeben.
Im Wireshark habe ich eine Aufzeichnung parallel laufen, da sehe ich das die Antwort korrekt gesendet wird.
Mein Problem ist der Post. Der möchte drei Parameter übergeben bekommen, und wenn ich die Response zuweise meckert der Compiler wegen inkompatibler Daten.

Nehme mal an dass das wieder an der steinalten Delphi-Version (6) liegt. Aber ich muss diese verwenden.
Ich habe mal einen Screenhot vom Code angehangen.

Mein Beispiel müsste 1 zu 1 bei dir klappen und im Response steht auch die Antwort als string. Da ich kein Delphi 6 habe kann ich es natürlich nicht überprüfen, aber falls tatsächlich die API von Indy nicht zu 100% gleich ist für jede Version, dann musst du eben die Methode korrekt aufrufen. Aus der ferne würde ich einfach mal raten das dein Post noch einen Parameter für die Antwort erwartet und zwar von Typ TStream. Wenn du jetzt mein Response von Typ string reinpackst, dann ist es logisch das es nicht geht.

InschenierSB 7. Mai 2018 12:38

AW: Webservice
 
Habe es glaube ich rausgefunden.
Bis hierher schonmal danke an alle!

InschenierSB 7. Mai 2018 12:56

AW: Webservice
 
Was ich aber noch nicht so richtig verstanden habe ist
was es mit der Try....Finally usw. Anweisung auf sich hat!?

TiGü 7. Mai 2018 13:10

AW: Webservice
 
Ich möchte dir die offizielle Dokumentation ans Herz legen, auch für weitere allgemeinere Fragen zu Delphi und seinen Sprachkonstrukten:
http://docwiki.embarcadero.com/RADSt...finally_Blocks
http://docwiki.embarcadero.com/RADSt...lly_Statements

InschenierSB 7. Mai 2018 14:51

AW: Webservice
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kann jemand mit folgender FM (siehe Screen-Shot Anhang) was anfangen?

Delphi-Quellcode:
 Result: String;
 Test:TIdHeaderInfo;

 //IdLogDebug: TIdLogDebug;
 procedure TForm1.Button1Click(Sender: TObject);
begin




  IdHTTP1:=TIdHTTP.Create(nil);
  HTTP_Stream:= TStringStream.Create('');
  Body:=TStringlist.Create;
  Body.Add('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cim="http://cim.osram.ws.gefasoft.com/" xmlns:dat="http://cim.osram.ws.gefasoft.com/DataContracts">');
  Body.Add('<soapenv:Header/>');
  Body.Add('<soapenv:Body>');
  Body.Add('<cim:GetLotInfoByLotName>');
  Body.Add('<cim:requestMessage>');
  Body.Add('<dat:ToolCode>?</dat:ToolCode>');
  Body.Add(' <dat:CheckSlotPos>false</dat:CheckSlotPos>');
  Body.Add('<dat:EquipmentValidation>false</dat:EquipmentValidation>');
  Body.Add('<dat:LotName>R173419P</dat:LotName>');
  Body.Add('<dat:ReturnBrokenWafers>true</dat:ReturnBrokenWafers>');
  Body.Add('<dat:UseSlotPosition>false</dat:UseSlotPosition>');
  Body.Add('</cim:requestMessage>');
  Body.Add('</cim:GetLotInfoByLotName>');
  Body.Add('</soapenv:Body>');
  Body.Add('</soapenv:Envelope>');


  Url:= 'http://tst-rbg14:8019/Lot.svc';

    IdHTTP1.Post('http://tst-rbg14:8019/Lot.svc',Body,HTTP_Stream);
   IdHTTP1.ProtocolVersion:=pv1_1;
   try
 // IdHTTP1.ProtocolVersion:='1.1';
  IdHTTP1.Request.AcceptEncoding:= 'gzip,deflate';
  IdHTTP1.Request.ContentType:='text/xml';
  IdHTTP1.Request.ContentEncoding:='UTF-8';
  IdHTTP1.Request.ExtraHeaders.Add('http://cim.osram.ws.gefasoft.com/ILot/GetLotInfoByLotName');
  IdHTTP1.Request.ContentLength:= 918;
  IdHTTP1.Host:= 'tst-rbg14:8019';
  IdHTTP1.Request.Connection:='Keep-Alive';
  IdHTTP1.Request.UserAgent:= 'Apache-HttpClient/4.1.1 (java 1.5)';
  IdHTTP1.Port:=8019;
 // Body.SaveToStream(Stream);
 //  Response:= IdHTTP1.Post('http://thomas-bayer.com/axis2/services/BLZService',Body,Stream);
// IdHHTP1.Request.
    HTTP_Stream.Position:=0;




 //IdHTTP1.Get(URL_,Stream);
// showMessage(IdHTTP1.Request.);
// Stream.LoadFromStream();
 memo1.Lines.Add(IdHTTP1.Response.Server);
   // Memo2.Lines.Add(Format('Response Code: %d', [IdHTTP1.ResponseCode]));
   //Memo2.Lines.Add(Format('Response Text: %s', [IdHTTP1.ResponseText]));
    Body.LoadFromStream(HTTP_Stream);
   Memo2.Lines.AddStrings(Body);
    finally

   HTTP_Stream.Free;
   end;


end;




end.

KodeZwerg 7. Mai 2018 15:23

AW: Webservice
 
Zitat:

Zitat von InschenierSB (Beitrag 1401549)
Kann jemand mit folgender FM (siehe Screen-Shot Anhang) was anfangen?
Delphi-Quellcode:
  IdHTTP1.Request.ContentType:='text/xml';

So sollte die Fehlermeldung verschwinden, ob es zu dem Rest von Dir passt weiß ich nicht.
Delphi-Quellcode:
IdHTTP1.Request.ContentType:='application/octet-stream';

InschenierSB 7. Mai 2018 15:43

AW: Webservice
 
Zitat:

Zitat von KodeZwerg (Beitrag 1401551)
Zitat:

Zitat von InschenierSB (Beitrag 1401549)
Kann jemand mit folgender FM (siehe Screen-Shot Anhang) was anfangen?
Delphi-Quellcode:
  IdHTTP1.Request.ContentType:='text/xml';

So sollte die Fehlermeldung verschwinden, ob es zu dem Rest von Dir passt weiß ich nicht.
Delphi-Quellcode:
IdHTTP1.Request.ContentType:='application/octet-stream';

Leider bleibt alles so wie es ist, selbst wenn ich es auskommentiere.... die Meldung ändert sich nicht

KodeZwerg 7. Mai 2018 16:57

AW: Webservice
 
application/octet-stream bedeuted das Du mit binär Daten arbeiten musst.
Ich vermute Dein Code basiert auf Text Inhalt, da sollest Du alles auf Binär umstellen damit ein Fernzugriff klappt.
Also nicht nur das Transport Protocol "application/octet-stream" setzen, alles was damit zu tun hat muss entsprechend angepasst werden.
Vor ein paar Tagen hab ich verschiedene Download Varianten mit GET() durchgekaut, schau da mal in den Thread rein, vielleicht kannst Du meinen Code ohne große Probleme nach Indy portieren, die Befehle sind fast identisch. (THttpClient)

mjustin 7. Mai 2018 17:06

AW: Webservice
 
Zitat:

Zitat von KodeZwerg (Beitrag 1401558)
application/octet-stream bedeuted das Du mit binär Daten arbeiten musst.
Ich vermute Dein Code basiert auf Text Inhalt, da sollest Du alles auf Binär umstellen damit ein Fernzugriff klappt.
Also nicht nur das Transport Protocol "application/octet-stream" setzen, alles was damit zu tun hat muss entsprechend angepasst werden.
Vor ein paar Tagen hab ich verschiedene Download Varianten mit GET() durchgekaut, schau da mal in den Thread rein, vielleicht kannst Du meinen Code ohne große Probleme nach Indy portieren, die Befehle sind fast identisch. (THttpClient)

Die Fehlermeldung im Screenshot sagt, das erwartete Encoding ist "text/xml". Gesendet hat der Client laut Fehlermeldung stattdessen "application/octet-stream".

Vielleicht hilft Wireshark oder ein HTTP Proxy wie Fiddler2 bei der Aufklärung wie die gesendeten Requests aussehen.

p.s. Host, Port, ContentLength anzugeben ist nicht sinnvoll, da diese Werte von TIdHTTP ermittelt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Seite 7 von 9   « Erste     567 89      

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