Domanda

Sto usando NuSOAP su PHP 5.2.6 e vedo che la dimensione massima del messaggio è di soli 1000 byte (il che rende difficile fare qualcosa di significativo). È impostato nel WSDL dell'endpoint o è qualcosa che posso configurare in NuSOAP?

È stato utile?

Soluzione

Per quanto riguarda il FUD su un "limite di 1000 byte" ... Ho cercato il codice sorgente nusoap_client e ho scoperto che il limite è efficace solo per output di debug .

Ciò significa che tutti i dati vengono elaborati e trasmessi al servizio web (indipendentemente dalle dimensioni), ma solo i primi 1000 byte (o più precisamente: caratteri) vengono visualizzati nel registro di debug.

Ecco il codice:

$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));

// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);

Come puoi vedere chiaramente, la chiamata getHTTPBody () utilizza l'intero $ soapmsg e solo l'output di debug è limitato ai primi 1000 caratteri. Se vuoi cambiare questo, basta cambiare la chiamata substr () per adattarla alle tue esigenze, o semplicemente sostituirla con $ soapmsg (quindi tutto è mostrato nel debug anche output).

Questo non dovrebbe assolutamente avere nulla a che fare con qualsiasi limite reale ai dati effettivamente inviati. Naturalmente potrebbero esserci altri fattori che limitano effettivamente le dimensioni di ciò che è possibile inviare (ad esempio il limite di RAM impostato per lo script PHP, i limiti dell'implementazione HTTP o l'esaurimento della memoria virtuale disponibile), ma dare per scontato che non esiste come un limite di "1000 byte" per i dati che è possibile inviare con NuSOAP.

Altri suggerimenti

Conosco solo passivamente PHP e non ho mai usato il pacchetto NuSOAP. Tuttavia, le dimensioni di un messaggio SOAP devono essere limitate solo dal mezzo di trasporto. Nel caso di HTTP, dovrebbe essere praticamente illimitato (la limitazione di 16384 byte nella forma delle richieste POST non è dovuta a SOAP, è dalle limitazioni del browser (che in realtà potrebbe non esistere più, ma non lo so per certo) ).

Consiglierei di trovare un indirizzo di contatto per gli autori / manutentori di NuSOAP e chiedere loro direttamente. A meno che non ci sia qualcosa nel WSDL (e non ricordo nulla nelle specifiche WSDL che limiterebbe un'intera dimensione del corpo del messaggio ... parametri individuali (tramite facce dello schema XML), ma non il corpo generale), quindi la limitazione sembrerebbe essere nel toolkit.

In una scatola di produzione utilizziamo le funzioni di sapone integrate in PHP 5.2.5 come server e NuSoap su PHP 4 e abbiamo trasferito con successo messaggi di dimensioni superiori a 1 MB.

Non penso che ci sia una limitazione in entrambi i prodotti, ma dovresti controllare le tue impostazioni in php.ini per

max_input_time        (defaults to 60)

Questo è il momento in cui ogni script è autorizzato ad analizzare l'input. Se il tempo è scaduto prima che l'analisi sia completa, lo script non verrà nemmeno eseguito.

Un sidenote: se possibile, suggerisco di migrare alle classi di estensione PHP SoapClient / SoapServer. NuSoap si è dimostrato non molto affidabile in situazioni di carico elevato, specialmente quando si tratta di cache. A volte abbiamo visto NuSoap semplicemente "dimenticare" " definizioni wsdl e funzionamento in modalità none-wsdl. Strano ...

Non hai detto se stai inviando o ricevendo messaggi SOAP. Se stai inviando, controllerei che NuSOAP stia inviando tramite POST anziché GET (probabilmente dovrai scavare nel codice per vedere; ho trovato la documentazione scarna). Se stai ricevendo, controlla le tue impostazioni di PHP.INI per cose come la memoria e la dimensione dei dati. In realtà, controlla i tuoi limiti di memoria, comunque - NuSOAP è piuttosto un maiale di memoria, IIRC.

Penso che la dimensione del messaggio sarà limitata piuttosto da un limite di memoria PHP, piuttosto che da un valore hardcoded. Almeno potrei inviare una stringa da 6,5 ??MB senza problemi. Quando ho provato a inviare una stringa da 8 MB ho ricevuto un'eccezione di memoria insufficiente all'interno di nusoap.php (il mio server ha un limite di 64 MB per PHP).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top