2014-07-24 9 views
7

Possiedo un'applicazione COM + multiutente che deve effettuare più richieste sui servizi Web SOAP. Ogni richiesta SOAP può durare da 10 a 60 secondi (che non è sotto il mio controllo). Il problema è che non posso mai fare più di 2 richieste allo stesso tempo.Il client SOAP Delphi non può conservare più di 2 richieste simultanee. Come aumentare?

Quando ho, ad esempio, 3 richieste simultanee, la terza richiesta inizia solo quando termina la seconda. Ho osservato lo stesso comportamento su un'applicazione console (a scopo di test) che ha generato più richieste simultanee allo stesso WebService e sono stato nuovamente limitato a 2 richieste.

Quando ho provato a consumare la stessa WebServices con un altro linguaggio (C#) è accaduto lo stesso, ma, al # client C c'è una proprietà che risolve il problema:

System.Net.ServicePointManager.DefaultConnectionLimit 

Quando ho aumentato la proprietà mi potrebbe mantenere qualsiasi numero di richieste simultanee che volevo. Esiste una proprietà simile a quella di Delphi?

Sto utilizzando lo strumento di importazione WSDL per utilizzare i servizi Web (Delphi XE2).

+0

Quale componente si sta utilizzando che esegue il requ EST? Mostra un po 'di codice. –

risposta

8

Delphi utilizza Wininet.dll per effettuare le richieste SOAP, IE utilizza la stessa DLL. Questa limitazione è infatti documented.

si hanno 2 scelte:

  • adattare il Registro di sistema, come affermato nell'articolo KB
  • Usa InternetSetOption prima della chiamata SOAP:

campione piccolo codice (si prega di notare che non è così include il controllo degli errori):

Const 
    INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73; 
    INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74; 
var 
    MaxConnections : Integer; 

begin 
    MaxConnections := 10; // adapt to your needs 
    InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @MaxConnections , SizeOf(MaxConnections)); 
    InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @MaxConnections , SizeOf(MaxConnections)); 
// do SOAP call 
end; 
+0

Quel pezzo di codice ha fatto il trucco. Grazie mille! – lucasdclopes

5

Per impostazione predefinita, i programmi di SOAP Delphi usa WinInet in Windows, e Indy (TIdHTTP) per altre piattaforme (vedi direttiva USE_INDY in unità SOAPHTTPTrans.pas), per comunicare con il server. [1]

Puoi provare a utilizzare Indy su Windows definendo USE_INDY e ricompilare la libreria SOAP (però non l'ho fatto io stesso in modo che i passaggi dettagliati per fare questo sono sconosciuti a me).

p.s. l'articolo collegato indica anche che UseNagle deve essere impostato su False.

Problemi correlati