2013-04-16 214 views
3

我正在研究一個嚴重依賴SOAP調用的項目。問題在於加載時間非常長。SOAP方法調用速度極慢

$client = new SoapClient("https://link.to.wsdl"); 
$client = $client->GetDestination(array(
"parameter1" => $param1, 
"parameter2" => $param2 
)); 

現在我做了一些定時和代碼的第一部分(發起對象$客戶端)需要大約2秒,非常可接受的。但是在調用getDestination時,它會加載大約10秒的加載時間。這與我所稱的每個獲取或設置方法都是一樣的。

此代碼是在PHP 5上運行的方法都寫在.NET 4.x的

有誰知道這是爲什麼,以及如何解決?

編輯:ping統計 10包發送,接收10個數據包,0.0%的分組丟失 往返最小/平均/最大/ STDDEV = 1.086/2.320/3.624/1.157毫秒

+1

如果您ping通目的地,需要多長時間才能響應? –

+0

10包發送,接收10個數據包,0.0%的分組丟失 往返最小/平均/最大/ STDDEV = 1.086/2.320/3.624/1.157毫秒 – user2285451

+1

在情況下,它可以幫助別人在某些時候,我的問題被證明是該DNS解析時間。無論出於何種原因,每次調用都在查找域(位於同一臺服務器上)。我將它添加到主機文件,每個呼叫從5秒變爲0秒:) –

回答

3

首先,應使使用ini值的soap.wsdl_cache_enabled WSDL緩存或使用SoapClient構造函數的參數$options。這將防止PHP從一次又一次的下載WSDL和加速比將構造(2秒也很長)

提速的方法調用本身,我需要更多的信息。您能否使用wireshark來反思您的應用程序和soap服務器之間的網絡通信?

+0

wsdl緩存已啓用。我可能可以使用wireshark,但我不確定我應該在尋找什麼以及從哪裏運行它? – user2285451

+0

你確定wsdl緩存有效嗎?看看緩存目錄。你看到wsdls嗎?那些wsdl的輸入必須被下載的外部引用? Wireshark:檢查需要多長時間才能完成響應。如果這真的需要10秒,那麼服務器性能問題 – hek2mgl

+0

好吧,似乎wsdl緩存不起作用。但是現在這個問題已經解決了,就像2秒鐘的時間一樣。現在大約需要10秒來加載一個頁面。 我使用Wireshark來檢查XML,它真的需要很長的時間來回應。它可能是服務器,我不確定。 – user2285451

3

我必須連接到SOAP服務的同一臺機器上我的代碼類似的問題。這是通過使用http://127.0.0.1/而不是http://localhost/作爲url解決的。

+0

這經常發生,因爲本地計算機沒有用於'localhost'的DNS條目 – Machavity