2010-04-16 6 views
5

stiamo sviluppando un servizio Web SOAP (Apache/PHP). Funzionano bene per chiamate di piccole dimensioni, ma con una chiamata soap da 1 Mb (la dimensione della chiamata HTTPS è 1 MB) il nostro client Delphi Soap si interrompe con un timeout su tutti i PC tranne uno, ei nostri client PHP funzionano bene con un default_socket_timeout = 300, ma si fermano con "Errore durante il recupero delle intestazioni http" con default_socket_timeout = 60.Soap Delphi Client termina con un timeout per una chiamata da 1 MB

Come possiamo modificare il timeout per Delphi? In realtà questo timeout sembrano essere in una libreria di rete di Windows XP (wininet.dll chiamato da soaphttptrans.pas)

Grazie
Cédric

risposta

5

In effetti si è verificato un problema con l'installazione di IE7: modifica tutto il timeout della rete.

PC con IE6 ha un secondes timeout 3600, IE7 cambiarlo a 30 secondes. L'uso di InternetQueryOption() mostra questo, e InternetSetOption aiuta a cambiarlo.

Grandi grazie al mio compagno di lavoro che caccia il bug per ore.

3

C'è un MaxSinglePostSize in SOAPHttpTrans. Mi sembra di ricordare di avere problemi con questo. Questo non è un limite, ma si comporta in modo diverso (si rompe in blocchi per l'invio) se sei finito, o sotto quel limite. (in pratica 32768 per impostazione predefinita). Prevedo che colpirà quella dimensione più presto se sarai su D2009/D2010 a causa dei widestrings. Sarebbe interessante vedere se ti imbatti in problemi di queste dimensioni. È possibile utilizzare Fiddler per acquisire un output (o collegarsi all'evento OnBeforePost e scaricare l'XML serializzato su un file) e verificare se è lì che si verificano problemi, anziché l'1 MB precedentemente osservato.

Tuttavia, la classe THTTPReqResp ha opzioni per SendTimeout e ReceiveTimeout. Prova a regolarli.

Inoltre ... se si utilizza Delphi prima di Delphi2007, è necessario aggiornare le proprie librerie di sapone. C'è un download da qualche parte ... molte correzioni di bug, incluso un brutto problema di memoria che causerà il blocco della tua app da parte di DEP.

+1

Un'altra cosa da considerare ... Prova a eseguire il payload tramite SoapUI. SoapUI utilizza uno stack di comunicazione diverso (basato su Java) anziché WinInet. Se si ottiene lo stesso risultato, si sa che probabilmente c'è qualcosa che non funziona sul server, o un intermediario come un firewall, un proxy, ESB, ecc. Non il client. –

Problemi correlati