2010-02-07 55 views
3

我已经在Sun轻量级http服务器上发布了Web服务端点。服务器正在使用ThreadPool执行程序进行连接(Executors.newCachedThreadPool())。 我也使用常规的Web服务客户端(也是JAX-WS)。JAX-WS超时问题

看来,对于每个超过5分钟的呼叫,服务器(或客户端)结束当前呼叫线程并打开一个新线程。在服务器中,它看起来像建立了一个新的连接并尝试运行相同的操作。

这只发生一次,这意味着“第二次电话”可能会超过5分钟。

是否有连接的默认超时?有没有办法配置它?

回答

0

其实我能够通过使用Pascal提供的信息找到黑客(谢谢!)。 您可以通过设置系统属性-sun.net.httpserver.idleInterval来覆盖http服务器的空闲时间。

1

我通常会认为这是一个客户端问题(然而 - 检查帕斯卡的答案)。客户将有一个定义的超时值,并将花费太长时间的操作。

例如在HttpClient中,您可以分别定义连接超时和读取超时(请参阅the configuration guide)。

如果方法确实需要5分钟或更长时间,我会考虑如何将操作分解为更加独立的操作,每个操作都需要较短的时间。或者在后台进行处理,并为客户提供一张票据,以便他们以后可以在不保持连接的情况下收到结果。

或者,你可以能够设置为无限超时,但我不建议这一点,因为你的客户的理想应该能够确定当你的服务器没有响应,由于问题/配置错误等

+0

您也可以为我正在使用的Web服务客户端定义超时属性: Map requestContext = bp.getRequestContext(); \t \t \t \t requestContext.put(JAXWSProperties.CONNECT_TIMEOUT,); requestContext.put(JAXWSProperties.REQUEST_TIMEOUT,); 但是,这并没有帮助。 – Tal 2010-02-07 18:23:43

+0

@Brian这实际上不是客户端问题。 – 2010-02-07 18:56:24

+0

@帕斯卡尔 - 指出(我还没有看过你提供的链接)。你知道Jetty是否不以类似的方式保留空闲连接?请注意,我已经适当地编辑了我的答案(!),但我认为对于5分钟的操作,客户端超时问题将在某个阶段发挥作用,因此我没有删除它。 – 2010-02-07 19:04:46