2008-10-23 95 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限制)。

相關問題