2011-08-31 46 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如果操作成功。谢谢。 –

相关问题