Question

J'utilise NuSOAP sur PHP 5.2.6 et je constate que la taille maximale du message n'est que de 1 000 octets (ce qui rend difficile toute action significative). Est-ce défini dans le WSDL du système d'extrémité ou est-ce une chose que je peux configurer dans NuSOAP?

Était-ce utile?

La solution

En ce qui concerne le FUD à propos d'une "limite de 1 000 octets" ..., j'ai consulté le code source nusoap_client et constaté que cette limite n'était effective que pour les sorties de débogage .

Cela signifie que toutes les données sont traitées et transmises au Webservice (quelle que soit leur taille), mais seuls les 1000 premiers octets (ou plus précisément: caractères) apparaissent dans le journal de débogage.

Voici le code:

$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);

Comme vous pouvez le voir clairement, l'appel getHTTPBody () utilise l'intégralité de $ soapmsg , et seule la sortie de débogage est limitée aux 1 000 premiers caractères. Si vous souhaitez modifier cela, modifiez simplement l'appel substr () pour répondre à vos besoins, ou remplacez-le simplement par $ soapmsg (afin que tout soit affiché dans le débogage sortie aussi).

Cela ne devrait absolument avoir rien à voir avec une limite réelle des données réellement envoyées. Bien entendu, d’autres facteurs pourraient limiter la taille de ce que vous pouvez envoyer (par exemple, la limite de RAM définie pour votre script PHP, les limitations de votre implémentation HTTP, ou le manque de mémoire virtuelle disponible), mais cela n’est pas acquis. telle qu'une "limite de 1000 octets" pour les données que vous pouvez envoyer avec NuSOAP.

Autres conseils

Je ne connais que très bien PHP et je n’ai jamais utilisé le paquet NuSOAP. Cependant, la taille d'un message SOAP ne doit être limitée que par le moyen de transport. Dans le cas de HTTP, il devrait être quasiment illimité (la limitation de 16384 octets dans les demandes de formulaire POST n'est pas due à SOAP, mais aux limitations du navigateur (qui peut en fait ne plus exister, mais je ne le sais pas avec certitude) ).

Je recommanderais de rechercher une adresse de contact pour les auteurs / responsables de NuSOAP et de le leur demander directement. Sauf s'il y a quelque chose dans le WSDL (et je ne me souviens de rien dans la spécification WSDL qui limiterait la taille d'un corps de message entier ... paramètres individuels (via des facettes de schéma XML), mais pas le corps global), la limitation semblerait être dans la boîte à outils.

Sur une machine de production, nous utilisons les fonctions Soap intégrées à PHP 5.2.5 en tant que serveur et NuSoap sous PHP 4 et avons transféré avec succès des messages de plus de 1 Mo.

Je ne pense pas qu'il y ait une limitation dans aucun produit, mais vous devriez vérifier vos paramètres dans php.ini pour

max_input_time        (defaults to 60)

Il s'agit du temps nécessaire à chaque script pour analyser les entrées. Si le temps est écoulé avant la fin de l'analyse, le script ne sera même pas exécuté.

Remarque: dans la mesure du possible, je suggère de migrer vers les classes d’extension PHP SoapClient / SoapServer. NuSoap s'est avéré peu fiable dans les situations de charge lourde, notamment lorsqu'il s'agit de cache. Parfois, nous avons vu NuSoap simplement "oubli". Définitions wsdl et travail en mode none-wsdl. Bizarre ...

Vous n'avez pas dit si vous envoyez ou recevez des messages SOAP. Si vous envoyez des messages, je vérifierai que NuSOAP les envoie via POST plutôt que GET (vous devrez probablement creuser dans le code pour voir; j'ai trouvé la documentation clairsemée). Si vous recevez, vérifiez dans vos paramètres PHP.INI des éléments comme la mémoire et la taille des données. En tout cas, vérifiez vos limites de mémoire, de toute façon - NuSOAP est une véritable mémoire, IIRC.

Je pense que la taille du message sera plutôt limitée par une limite de mémoire PHP que par une valeur codée en dur. Au moins, je pourrais envoyer une chaîne de 6,5 Mo sans aucun problème. Lorsque j’ai essayé d’envoyer une chaîne de 8 Mo, j’ai eu une exception de mémoire insuffisante dans nusoap.php (mon serveur a une limite de 64 Mo pour PHP).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top