namespace example cabecera body php soap wsdl nusoap

php - example - soap message structure



¿Cómo se determina el tamaño máximo de un mensaje SOAP? (5)

Estoy usando NuSOAP en PHP 5.2.6 y estoy viendo que el tamaño máximo del mensaje es de solo 1000 bytes (lo que hace que sea difícil hacer algo significativo). ¿Está esto configurado en el WSDL del punto final o es algo que puedo configurar en NuSOAP?


En una caja de producción utilizamos las funciones de Soap incorporadas de PHP 5.2.5 como servidor y NuSoap en PHP 4 y hemos transferido con éxito mensajes de más de 1 MB.

No creo que haya una limitación en ninguno de los productos, pero debe verificar su configuración en php.ini para

max_input_time (defaults to 60)

Este es el momento en que cada script puede analizar la entrada. Si el tiempo se agota antes de que se complete el análisis, el script ni siquiera se ejecutará.

Una nota al margen: si es posible, sugiero migrar a las clases de extensión PHP de SoapClient / SoapServer. NuSoap ha demostrado no ser muy confiable en situaciones de carga pesada, especialmente cuando se trata de la memoria caché. A veces vimos a NuSoap simplemente "olvidando" las definiciones wsdl y trabajando en modo no-wsdl. Extraño...


Solo estoy familiarizado con PHP y nunca he usado el paquete NuSOAP. Sin embargo, el tamaño del mensaje SOAP solo debe estar limitado por el medio de transporte. En el caso de HTTP, debería ser bastante ilimitado (la limitación de 16384 bytes en solicitudes de POST de formulario no se debe a SOAP, sino a limitaciones de navegador (que en realidad ya no existen, pero no estoy seguro). )

Yo recomendaría encontrar una dirección de contacto para los autores / mantenedores de NuSOAP y preguntarles directamente. A menos que haya algo en el WSDL (y no recuerdo nada en la especificación WSDL que limite todo un mensaje-cuerpo-tamaño ... parámetros individuales (a través de facetas XML Schema), pero no el cuerpo general), entonces la limitación parecería estar en el juego de herramientas.


No ha dicho si está enviando o recibiendo mensajes SOAP. Si está enviando, verificaría que NuSOAP esté enviando a través de POST en lugar de GET (probablemente tendrá que profundizar en el código para verlo, encontré que la documentación es escasa). Si está recibiendo, revise su configuración PHP.INI para cosas como memoria y tamaño de datos. De hecho, verifica los límites de tu memoria, de todos modos, NuSOAP es todo un recuerdo de memoria, IIRC.


Con respecto al FUD sobre un "límite de 1000 bytes" ... busqué el código fuente nusoap_client y encontré que el límite solo es efectivo para la salida de depuración .

Esto significa que todos los datos se procesan y pasan al servicio web (independientemente de su tamaño), pero solo los primeros 1000 bytes (o más precisamente: caracteres) se muestran en el registro de depuración.

Aquí está el código:

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

Como puede ver claramente, la llamada getHTTPBody() usa el $soapmsg , y solo la salida de depuración está limitada a los primeros 1000 caracteres. Si desea cambiar esto, simplemente cambie la llamada de substr() para que se ajuste a sus necesidades, o simplemente reemplácela por $soapmsg (para que todo se muestre también en la salida de depuración).

Esto no debería tener absolutamente nada que ver con ningún límite real en los datos realmente enviados. Por supuesto, podría haber otros factores que limiten el tamaño de lo que puede enviar (por ejemplo, el límite de RAM establecido para su script PHP, las limitaciones de su implementación HTTP o la falta de memoria virtual disponible), pero dé por hecho que no hay tal como un "límite de 1000 bytes" para los datos que puede enviar con NuSOAP.


Creo que el tamaño del mensaje estará limitado más bien por un límite de memoria PHP, que por algún valor codificado. Al menos podría enviar una cadena de 6.5MB sin ningún problema. Cuando traté de enviar una cadena de 8MB obtuve una excepción de falta de memoria dentro de nusoap.php (mi servidor tiene un límite de 64 MB para PHP).