Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SOAP HTTPRIO asynchroner Methodenaufruf (https://www.delphipraxis.net/152214-soap-httprio-asynchroner-methodenaufruf.html)

gmc616 15. Jun 2010 13:14

SOAP HTTPRIO asynchroner Methodenaufruf
 
Hallo DP,

Ich möchte einen WebService abfragen.
Aus der WSDL-Datei habe ich mittels Delphi WSDL-Importer eine Klasse erzeugt und frage das ganze per THTTPRIO ab.
Status- und Versionabfragen funktionieren problemlos.

Nur wenn ich Daten holen möchte - und das können ne ganze Menge sein - bekomme ich einen TimeOut.
In der Doku zu dem WebService steht, mal solle die Daten asynchron abrufen.
Der Beispielcode, geschrieben in C#, zeigt einen Aufruf ala AsyncValues(...) .
So eine Methode gibt es aber der WSDL-Definition nicht und auch die erzeugte Klasse besitzt keine solche Methode.

Wie kann man einen WebService asynchron abfragen?

Danke und Gruß
gmmc

Koolance 13. Sep 2012 07:47

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Hallo,
ich habe gerade das gleiche Problem (mit Delphi 2006), mein nicht funktionierender Ansatz den ich im Web gefunden habe ist der hier:

Code:
procedure TGdvConnectForm.HTTPRIO1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var timeout1,timeout2,timeout3:integer;
begin
//  HTTPReqResp.ConnectTimeout:=500000;
//  HTTPReqResp.SendTimeout:=500000;
//  HTTPReqResp.ReceiveTimeout:=500000;
  timeout1:=1000000;
  timeout2:=1000000;
  timeout3:=1000000;
  InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@timeout1), SizeOf(timeout1));
  InternetSetOption(Data, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@timeout2), SizeOf(timeout2));
  InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@timeout3), SizeOf(timeout3));

end;
Es gibt wohl einen Windows Bug durch den sich der Timeout nicht setzen lässt.
Bist du vielleicht schon weiter?

Mavarik 13. Sep 2012 10:16

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Was nennst Du viel?

1KB
1MB
1GB

Ich übertrage von kleinen Request bis hin zu einem kompletten Datenbackupdate ohne Probleme...

Mavarik

Koolance 13. Sep 2012 10:36

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Bei mir sind es PDF's wahrscheinlichh 300-500kb, allerings ist die Internetgeschwindigkeit aller Anwender nicht gerade toll (gibt glaube ich sogar noch einen mit ISDN) und ich sitze auch an einer 2mbit Lwitung fpr 50 Leut, kann das also prima testen und kriege immer weiter Timeouts :(

Daher brauche ich einen lange Timeout die 10 Sekunden die Standarsmäßig hinterlegt sind sind zu wenig.

Habe gerade mal probiert den Aufruf in einen Thread zu packen weil es im folgendem Link empfohlen wird, half aber auch nicht.
http://www.delphigroups.info/2/10/344289.html

Welches Delphi nutzt du und wie hast du den Timout geändert?

Mavarik 13. Sep 2012 10:44

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Ich nehme Delphi 2007...

Habe es NIE gebraucht den Timeout zu verändern und übertrage durchaus größere Datenmengen...

Mavarik

Koolance 13. Sep 2012 10:45

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Du Glücklicher :?

Mavarik 13. Sep 2012 10:46

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Zitat:

Zitat von Koolance (Beitrag 1182730)
Du Glücklicher :?

LOL...

Ich denke Dein Problem liegt ganz wo anders...

Mavarik

Koolance 13. Sep 2012 10:57

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Naja, die Testfunktion vom Webservice in der keien Datei übertreg wird funktioniert und der Entwickler von Ihm sagt bei ihm dauert es etwas 20 Sekunden.
Die Fehlermeldung ist eigentlich auch recht eindeutig:
Code:
Erste Gelegenheit für Exception bei $7C812AEB. Exception-Klasse ESOAPHTTPException mit Meldung 'The operation timed out - URL:https://**zensiert***.asmx - SOAPAction:http://tempuri.org/RechnungsAnfrage'. Prozess ConnectProject.exe (10480)
Vielleicht liegt es am HTTPS, wobei ich mir das eigentlich nicht vorstellen kann.

Mavarik 13. Sep 2012 10:59

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
OK https hab ich nocht nicht versucht...

Zeig mal Deinen Remoteable Record

Mavarik

Koolance 13. Sep 2012 11:03

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Sry, aber was ist ein Remoteable Record?
Meinst du die XML die versand wird?

Mavarik 13. Sep 2012 11:11

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Zitat:

Zitat von Koolance (Beitrag 1182747)
Sry, aber was ist ein Remoteable Record?
Meinst du die XML die versand wird?

AHH...

Delphi-Quellcode:
  TRemoteUser = class(TRemotable)

Sowas....?


Mavarik

Koolance 13. Sep 2012 11:43

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Achso, die httprio übergebe ich beim Aufruf mit dem Versuch vorher den Timeout zu ändern.

Code:
myCeService:=ceservice.GetServiceSoap(False,'',HTTPRIO1);
myCeResult:=myCeService.msgRechnungsAnfrage(myCeGlasabrechung,myCeAuthenticator);
Code:
Für die Übersicht wieder raus genommen.

Mavarik 13. Sep 2012 12:07

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
WOW...

Viel....

Kompliziert...

Ich mach mir daraus ein Record...

Pack den mit zLibEx und schiebe nur ein TByteDynArray über die Leitung...
Dadurch so gut wie 0 Overhead...

Aber so wie DU das machst, sollte es auch gehen.^^
Nur die XML Datei wir viel länger...

Mavarik

Koolance 13. Sep 2012 12:14

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Das ist über den Delphi WSDL Import gemacht und danach noch leicht von mir modifiziert, mache ich immer so.

Das Problem ist halt die HTTPrio, die verwendest du aber auch?

Elvis 13. Sep 2012 15:57

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Zitat:

Zitat von Mavarik (Beitrag 1182763)
WOW...
Viel....
Kompliziert...
Ich mach mir daraus ein Record...

Du hilfst nicht wirklich. Er muss einen Webservice nutzen, den nicht er geschrieben hat.
Aber er hatte das wohl nur 5-mal oder so erwähnt...

@Koolance
Schaue mal, ob dir das hier weiter hilft.

http://shenoyatwork.blogspot.de/2006...lphi-soap.html

Ich selbst hatte das Glück nie viel mit Delphis halbherzigen WSDL-Krempel machen zu müssen.

mjustin 13. Sep 2012 17:53

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Zitat:

Zitat von gmc616 (Beitrag 1028995)
Nur wenn ich Daten holen möchte - und das können ne ganze Menge sein - bekomme ich einen TimeOut.

Mit diesen Tools bekommt man einige Web Service Problem leichter in den Griff

* SoapUI ('high level': Aufruf einzelner SOAP Service Methoden)
* Fiddler (auf der HTTP Protokollschicht)
* Wireshark (Datentraffic)

Wenn der SoapUI Zugriff schon NICHT funktionieren würde, kann man davo ausgehen dass das Problem nicht in Delphi liegt.

Koolance 14. Sep 2012 09:12

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
http://shenoyatwork.blogspot.de/2006...lphi-soap.html
Hatte ich schon probiert, wird aber komplett ignoriert. Bis jetzt kam ich mit den Delphi WS eigentlich ganz gu klar, nutze sie sogar under D6 und verwende jetzt nur 2006 weil die WS unter D6 kein HTTPS können.

Koolance 14. Sep 2012 11:08

AW: SOAP HTTPRIO asynchroner Methodenaufruf
 
Delphi ist doof :-D

Ich habe gerade herausgefunden das trotz der Timeoutmeldung im Hintergrund der Datensatz abgeschickt wird.

Jetzt lasse ich mir noch einen WS programmieren mit dem ich prüfen kann ob er angekommen ist und die Sache ist erledigt. Ist zwar keine tolle Lösung aber ich muss weiter kommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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-2025 by Thomas Breitkreuz