2011-08-31 42 views
3

我有一個在Linux上運行的Java Web服務客戶端(使用Axis 1.4),它調用一系列針對Windows服務器執行的Web服務操作。有時候,一些事務性操作失敗,此異常:Web服務讀取超時,但操作仍完成?

java.net.SocketTimeoutException: Read timed out 

然而,在服務器上操作完成(甚至無需在客戶端上沒有任何有用的回覆)。這是Web服務器/客戶端的錯誤嗎?或者預計會發生在TCP套接字上?

+0

如果您在套接字上設置讀取超時,那麼這是預期的行爲。嘗試配置您的底層套接字,以便在等待響應時不超時。雖然我不知道如何在Axis中做到這一點。 –

回答

2

這是預期的行爲,而不是錯誤。 Web服務背後的操作並不知道任何有關您的讀取超時的信息,因此將繼續處理該操作。

您可以增加連接超時 - 如果您手動操作套接字本身,則socket.connect()方法可能會超時(以毫秒爲單位)。零應避免你的側面超時 - 請參閱API文檔。

如果操作在每種情況下都需要很長時間,您可能需要考慮使這種異步 - 第一個請求提交操作,然後第二個請求返回結果,可能帶有一些輪詢看看結果何時準備好。

如果您認爲該操作應該在這段時間內完成,您是否有權訪問服務器以瞭解它爲何需要這麼長時間?

+0

服務器真的不在我的控制之下。我想我將不得不趕上那些讀取超時異常,並嘗試查詢WS如果操作成功。謝謝。 –

相關問題