我在PHP 5.2.6上使用NuSOAP,我发现最大消息大小只有1000个字节(这使得很难做任何有意义的事情)。这是在端点的WSDL中设置的还是我可以在NuSOAP中配置的东西?

有帮助吗?

解决方案

关于“1000字节限制”的FUD ...我查找了nusoap_client源代码,发现该限制仅对调试输出有效。

这意味着处理所有数据并将其传递给Web服务(无论其大小如何),但调试日志中仅显示前1000个字节(或更准确地说:字符)。

以下是代码:

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

您可以清楚地看到, getHTTPBody()调用使用整个 $ soapmsg ,只有调试输出仅限于前1000个字符。如果你想更改它,只需更改 substr()调用以满足您的需要,或者只需用 $ soapmsg 替换它(所以一切都显示在调试中输出也是。)

这应该与实际发送的数据的任何实际限制完全无关。当然还有其他因素实际上会限制您可以发送的内容的大小(例如,为PHP脚本设置的RAM限制,HTTP实现的限制或者可用的虚拟内存不足),但是理所当然地认为没有诸如“1000字节限制”之类的东西。您可以使用NuSOAP发送的数据。

其他提示

我只是熟悉PHP,并且从未使用过NuSOAP包。但是,SOAP消息的大小应仅受传输介质的限制。在HTTP的情况下,它应该是非常无限的(形式POST请求中16384字节的限制不是由于SOAP,它来自浏览器限制(实际上可能不再存在,但我不确定) )。

我建议为NuSOAP的作者/维护者寻找联系地址并直接询问他们。除非WSDL中存在某些内容(我不记得WSDL规范中的任何内容会限制整个消息体大小...个别参数(通过XML Schema方面),而不是整个主体),那么限制似乎是在工具包中。

在生产盒上,我们使用PHP 5.2.5内置Soap函数作为服务器和PHP 4上的NuSoap,并成功传输大于1 MB的消息。

我不认为这两种产品都有限制,但您应该在php.ini中检查您的设置

max_input_time        (defaults to 60)

这是允许每个脚本解析输入的时间。如果在解析完成之前时间已到,则脚本甚至不会运行。

旁注:如果可能,我建议迁移到SoapClient / SoapServer PHP扩展类。 NuSoap在重负载情况下证明自己不太可靠,特别是在高速缓存方面。有时我们看到NuSoap只是“忘记”了wsdl定义并在非wsdl模式下工作。奇怪的...

您还没有说过您是在发送还是接收SOAP消息。如果你要发送,我会检查NuSOAP是通过POST而不是GET发送的(你可能需要深入研究代码才能看到;我发现文档稀疏)。如果您正在接收,请检查您的PHP.INI设置,了解内存和数据大小等内容。实际上,无论如何都要检查你的内存限制--NuSOAP是一个非常记忆的问题,IIRC。

我认为消息大小将受限于PHP内存限制,而不是某些硬编码值。至少我可以发送一个6.5MB的字符串没有任何问题。当我尝试发送8MB字符串时,我在nusoap.php中遇到了内存不足(我的服务器对PHP有64MB的限制)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top