Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   SOAP Webservice, erster Funktionsaufruf dauert ewig (https://www.delphipraxis.net/180295-soap-webservice-erster-funktionsaufruf-dauert-ewig.html)

moe120 8. Mai 2014 16:17

SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Ahoi,

habe einen kleinen SOAP Webservice der an mobile Endgeräte dies und das aus einer Datenbank rausziehen soll je nach Berechtigung. Das an sich klappt wie gewünscht, SOAP Webservice und iPhone-App sind mit XE6 gebaut. Der Import der WSDL klappt auch.

Mein Problem ist nun jedoch, dass die erste Funktion des Webservice die ich vom mobilen Client aus aufrufe 5x so lange braucht wie alle weiteren Aufrufe, also in konkreten Zeiten: 1. Funktionsaufruf = 3000ms, 2. u. weitere Funktionsaufrufe = 600ms.

Jemand sowas schonmal gehabt ?
Es liegt auch nicht an der Funktion, es ist egal welche ich als erstes aufrufe, die erste aufgerufene braucht 3 Sekunden, die 2. dann nur noch 0,6s.

Code-technisch mach ich das im Client in etwa so:

Code:
function get_webservice(url: String; use_ssl: Boolean): Ivp_mobile_webservice;
var tp_prefix: String;
begin

  if use_ssl
  then tp_prefix:= 'https://'
  else tp_prefix:= 'http://';

  if (AnsiPos('http://', AnsiLowerCase(url))<>1)
  and (AnsiPos('https://', AnsiLowerCase(url))<>1)
  then url:= tp_prefix + url;

  Result:= getIvp_mobile_webservice(true, Url + '/wsdl/Ivp_mobile_webservice');

end;


mein_webservice:= get_webservice(url, ssl_ja_nein);

//1. Aufruf, dauert 3 Sekunden
x:= mein_webservice.gib_mir_5();

//2. Aufruf, dauert 0,6Sekunden
x:= mein_webservice.gib_mir_5();

mit SOAPUI kann ich das Problem nicht nachstellen, da dauern alle Aufrufe, auch der 1. nur um die 100ms (über LAN statt 3G + Firewall).

Bernhard Geyer 8. Mai 2014 19:08

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Probier mal statt Servername die IP-Adresse.
Das Problem "erster Aufruf dauert lange" kenne ich wenn Probleme bei der Namensauflösung vorhanden sind.

Union 8. Mai 2014 19:52

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Wird das Interface beim ersten Aufruf erst aus dem WSDL generiert oder hast Du das importiert?

mjustin 9. Mai 2014 07:01

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Falls die WSDL extern erreichbar ist würde ich auf dem mobilen Gerät den Webbrowser verwenden um diese zu öffnen und so die Zeit für den Verbindungsaufbau über 3G / Firewall zu testen.

mquadrat 9. Mai 2014 11:57

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Wie wird der Webservice denn gehostet? Viele Web-Services beenden Anwendungen (in dem Fall deinen Dienst) bei Inaktivität und starten sie dann erst wieder beim ersten Zugriff. Wobei man das schnell ausschließen kann, indem man die App 2x kurz hintereinander startet. Hast du auch beim zweiten Start die Verzögerung, dann kann man das als Fehlerquelle schon mal ausschließen.

moe120 9. Mai 2014 14:34

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1258328)
Probier mal statt Servername die IP-Adresse.
Das Problem "erster Aufruf dauert lange" kenne ich wenn Probleme bei der Namensauflösung vorhanden sind.

hab in dem Einstellungsfeld in meiner App von Hause aus schon eine IP statt Servernamen drin stehen. Das kann es also nicht sein.


Zitat:

Zitat von mjustin (Beitrag 1258362)
Falls die WSDL extern erreichbar ist würde ich auf dem mobilen Gerät den Webbrowser verwenden um diese zu öffnen und so die Zeit für den Verbindungsaufbau über 3G / Firewall zu testen.

guter Hinweis, danke, hab ich probiert aber ... möööp .. Seite mit den WSDL Infos ist in Null komma Nix geladen :)

moe120 9. Mai 2014 14:38

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Zitat:

Zitat von Union (Beitrag 1258330)
Wird das Interface beim ersten Aufruf erst aus dem WSDL generiert oder hast Du das importiert?

die Interface-Sektion des Webservice hab ich bereits per Wizard in das Delphiprojekt importiert (Datei>Neu>Weitere>Webservice>WSDL Import), d.h. alle Funktionen und Parameter sollten bekannt sein.

Aber ich vermute auch dass der beim ersten Start da nochmal was holt, aber was und wo kann man das abstellen wenns nicht unbedingt nötig ist ?

moe120 9. Mai 2014 14:42

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Zitat:

Zitat von mquadrat (Beitrag 1258411)
Wie wird der Webservice denn gehostet? Viele Web-Services beenden Anwendungen (in dem Fall deinen Dienst) bei Inaktivität und starten sie dann erst wieder beim ersten Zugriff. Wobei man das schnell ausschließen kann, indem man die App 2x kurz hintereinander startet. Hast du auch beim zweiten Start die Verzögerung, dann kann man das als Fehlerquelle schon mal ausschließen.

der webservice liegt als .exe im inetpub-Verzeichnis eines IIS, wenn ich die App für Windows compiliere statt aufs iPhone dann hab ich diese Anfangsverzögerung nicht. Ebenfalls kann ich mit der WindowsApp problemlos SSL nutzen was beim iPhone zu einem Fehler führt. (WSDL-Datei/-Ort kann nicht geladen werden: .... Fehler [Wert für IOHandler ist ungültig]) das sollte eig. laut Embarcadero mit XE5 Update1 behoben worden sein aber wurde es wohl nicht.

Das 2x Nacheinanderstarten hab ich probiert, keine Änderung

Union 9. Mai 2014 14:50

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Vermutlich werden unter iOS noch diverse dylib geladen beim ersten Start. Ansonsten erfolgt die Neugenerierung aus WSDL nur wenn Du sie mit True als erstem Parameter aufrufst, der default ist False.

moe120 9. Mai 2014 14:58

AW: SOAP Webservice, erster Funktionsaufruf dauert ewig
 
Liste der Anhänge anzeigen (Anzahl: 1)
habs jetzt mal mit false statt true als ersten Parameter probiert
Code:
Result:= getIvp_mobile_webservice(false, Url + '/wsdl/Ivp_mobile_webservice');
Aber da krieg ich den Fehler siehe Anhang. (das #2406... Version prüfen..) ist ein Fehlercode von mir damit ich weiss an welcher Stelle es geknallt hat) Mir deucht einer der 40-Tausend nicht näher dokumentierten Haken beim WSDL-Import Wizard ist falsch gesetzt ?

Komisch ist auch dass der Aufruf dieser Zeile (mit true statt false) nur schlappe 50ms dauert, sollte er da nicht schon losschlagen und sich alles holen wenn das die Ursache ist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.
Seite 1 von 2  1 2      

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