我在PHP 5.2.6上使用NuSOAP,我发现最大消息大小只有1000个字节(这使得很难做任何有意义的事情)。这是在端点的WSDL中设置的还是我可以在NuSOAP中配置的东西?
答案 0 :(得分:6)
关于“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实现的限制或者可用的虚拟内存不足),但是理所当然地认为没有您可以使用NuSOAP发送的数据的“1000字节限制”。
答案 1 :(得分:2)
我只是熟悉PHP,并且从未使用过NuSOAP包。但是,SOAP消息的大小应仅受传输介质的限制。在HTTP的情况下,它应该是非常无限的(形式POST请求中16384字节的限制不是由于SOAP,它来自浏览器限制(实际上可能不再存在,但我不确定) )。
我建议为NuSOAP的作者/维护者寻找联系地址并直接询问他们。除非WSDL中存在某些内容(我不记得WSDL规范中的任何内容会限制整个消息体大小...个别参数(通过XML Schema facet),而不是整个主体),那么限制似乎是在工具包中。
答案 2 :(得分:2)
在生产盒上,我们使用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模式下工作。奇怪的...
答案 3 :(得分:1)
您还没有说过您是在发送还是接收SOAP消息。如果你要发送,我会检查NuSOAP是通过POST而不是GET发送的(你可能需要深入研究代码才能看到;我发现文档稀疏)。如果您正在接收,请检查您的PHP.INI设置,了解内存和数据大小等内容。实际上,无论如何都要检查你的内存限制--NuSOAP是一个非常记忆的问题,IIRC。
答案 4 :(得分:0)
我认为消息大小将受限于PHP内存限制,而不是某些硬编码值。至少我可以发送一个6.5MB的字符串没有任何问题。当我尝试发送8MB字符串时,我在nusoap.php中遇到了内存不足(我的服务器对PHP有64MB的限制)。