2013-03-22 41 views
5

我正在從我的Android應用程序調用Web服務。我通過應用程序對這項服務進行了許多不同的調用,每個人都在不到一秒的時間內返回數​​據,除了一個。即使實際的Web服務呼叫接近即時,我的一個呼叫也可能需要一分鐘才能返回數據。線路發生問題:HttpTransportSe.call()方法花費最多一分鐘的時間用於Web服務調用

transport.call(SOAP_ACTION, soapEnvelope); 

這被調用並且該值幾乎是瞬間從Web服務返回。但它可能需要長達一分鐘到達下一行:

SoapObject result = (SoapObject) soapEnvelope.bodyIn; 

什麼是Web服務返回的數據和應用程序打下一行(上面)之間發生了什麼?有沒有辦法減少這種延遲?有什麼簡單的檢查?

+0

你確定結果快嗎?服務器可能會因爲某種原因保持連接打開 – njzk2 2013-03-22 14:19:30

+0

是的,當我在Web瀏覽器中訪問Web服務位置時,它會立即返回結果。當遠程調試Web服務時,延遲來自當fucntion返回字符串直到'SoapObject result =(SoapObject)soapEnvelope.bodyIn'這一行',因此Web服務沒有延遲。所有其他對Web服務的調用都使用完全相同的代碼來完成請求,只需更改一些變量即可。 – anothershrubery 2013-03-22 14:46:23

回答

1

原來只有在調試應用程序時出現延遲。當沒有附加調試器的情況下運行應用程序時,它會立即返回。

1

有沒有辦法減少這種延遲?有什麼簡單的檢查?

知道的唯一方法就是測量各個領域的時間差異。對於SOAP Web服務調用來說,這些是度量的時間。

客戶端的時間

客戶端應用程序代碼 - >請求處理程序 - > 請求序列化 - > 請求調度 - > HTTP傳輸 - >服務器端

服務器端的時間

接收HTTP請求 - >反序列化 - >應用程序代碼 - >響應處理程序 - >序列化 - >調度 - > HTTP傳輸

堵塞通常在應用程序代碼,處理程序和網絡中。衡量這些,你可以找到時間花在哪裏。

  • 要測量應用程序代碼和處理程序使用的CPU時間,請使用 事件探查器。我建議Jprofiler
  • 要測量網絡時間,請ping目標服務器並使用網絡調試代理,如Charles。它可以告訴你網絡上的請求花費的時間。
+0

我知道延遲的位置,它在ksoap2第三方庫中,特別是在'HttpTransportSE.call()'方法中。我正在尋找解決這種延遲的方法,或者查看可能導致延遲的代碼片段。 – anothershrubery 2013-03-25 12:26:23

相關問題