2008-10-23 85 views

回答

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字节限制”不存在。

2

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

我建议找到NuSOAP的作者/维护者的联系地址,并直接询问他们。除非WSDL中有东西(并且我没有记得WSDL规范中会限制整个消息体大小......个别参数(通过XML Schema方面)的任何内容,但是不记录整体),那么限制似乎是在工具箱中。

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模式工作。奇怪...

1

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

0

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

相关问题