Pergunta

Estou usando o NuSOAP no PHP 5.2.6 e vejo que o tamanho máximo da mensagem é de apenas 1.000 bytes (o que torna difícil fazer algo significativo).Isso está definido no WSDL do endpoint ou é algo que posso configurar no NuSOAP?

Foi útil?

Solução

Em relação ao FUD sobre um "limite de 1000 bytes"...Pesquisei o código-fonte nusoap_client e descobri que o limite só é eficaz para saída de depuração.

Isso significa que todos os dados são processados ​​e repassados ​​ao webservice (independentemente do seu tamanho), mas apenas os primeiros 1000 bytes (ou mais precisamente:caracteres) são mostrados no log de depuração.

Aqui está o 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 você pode ver claramente, o getHTTPBody() chamada usa o todo $soapmsg, e apenas a saída de depuração é limitada aos primeiros 1.000 caracteres.Se você quiser mudar isso, basta alterar o substr() ligue para atender às suas necessidades ou simplesmente substitua-o por $soapmsg (portanto, tudo também é mostrado na saída de depuração).

Isto não deve ter absolutamente nada a ver com qualquer limite real dos dados realmente enviados.É claro que pode haver outros fatores que limitam o tamanho do que você pode enviar (por exemplo,g.o limite de RAM definido para seu script PHP, limitações de sua implementação HTTP ou falta de memória virtual disponível), mas tenha como certo que não existe um "limite de 1000 bytes" para os dados que você pode enviar com NuSOAP.

Outras dicas

Só sou familiar com o PHP e nunca usei o pacote NUSOAP. No entanto, o tamanho de uma mensagem de sabão deve ser limitado apenas pelo meio de transporte. No caso do HTTP, deve ser praticamente ilimitado (a limitação de 16384 bytes no formulário Post Solictações não é devido ao sabão, é de limitações do navegador (que realmente não existem mais, mas não sei ao certo) ).

Eu recomendaria encontrar um endereço de contato para os autores/mantenedores do NUSOAP e perguntar diretamente. A menos que haja algo no WSDL (e não me lembro de nada nas especificações WSDL que limitariam um tamanho de corpo inteiro ... parâmetros individuais (através de facetas de esquema XML), mas não o corpo geral), então a limitação parece estar no kit de ferramentas.

Em uma caixa de produção, usamos as funções de sabão embutidas do PHP 5.2.5 como servidor e NUSOAP no PHP 4 e transferimos com sucesso mensagens maiores que 1 MB.

Eu não acho que haja uma limitação em nenhum dos produtos, mas você deve verificar suas configurações em php.ini para

max_input_time        (defaults to 60)

Este é o momento em que cada script é permitido analisar a entrada. Se o tempo terminar antes da conclusão da análise, o script nem será executado.

Uma Sidenote: Se possível, sugiro migrar para as classes de extensão PHP SoapClient/SoapSserver. O NUSOAP se mostrou não muito confiável em situações de carga pesada, especialmente quando se trata do cache. Às vezes, vimos o NUSOAP simplesmente "esquecendo" as definições WSDL e trabalhando em nenhum modo WSDL. Esquisito...

Você não disse se está enviando ou recebendo mensagens de sabão. Se você estiver enviando, estaria verificando que o NUSOAP está enviando via postagem em vez de obter (você provavelmente terá que entrar no código para ver; eu achei a documentação escassa). Se você estiver recebendo, verifique suas configurações do Php.ini para obter a memória e o tamanho dos dados. Na verdade, verifique seus limites de memória, de qualquer maneira - o NUSOAP é um porco de memória, IIRC.

Eu acho que o tamanho da mensagem será limitado por um limite de memória PHP, do que por algum valor codificado. Pelo menos eu poderia enviar uma string de 6,5 MB sem problemas. Quando tentei enviar uma string de 8 MB, recebi uma exceção fora da memória dentro do nusoap.php (meu servidor tem limite de 64 MB para PHP).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top