【问题标题】:JAXWS and Http Post Timeout in GlassFish v3.0.1GlassFish v3.0.1 中的 JAXWS 和 Http Post 超时
【发布时间】:2013-03-17 00:02:21
【问题描述】:

我正在尝试为 JAX WS 和 Http Post 调用设置连接和请求超时。 我的代码有效,但最多只有 20 秒。 那就是我可以把超时值改成5秒,2秒就可以了,但是把超时值设置成30秒会在20秒超时,把超时值设置成60秒还是会在20秒超时。 有人知道最长 20 秒的设置在哪里吗??

对于 JAXWS:

//This works, timed out in 10 seconds
((BindingProvider) soapPort).getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, 10000);

// This would time out in 20 seconds!!!
((BindingProvider) soapPort).getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, 60000);`

对于 Http:

// This works, timed out in 10 seconds
HttpConnectionParams.setConnectionTimeout(params, 10000);

// This would time out in 20 seconds!!!
HttpConnectionParams.setConnectionTimeout(params, 50000);

【问题讨论】:

  • 编辑了我的帖子以添加代码
  • 对于 OT 评论很抱歉,但我正准备在 5 月 13 日为您的最新问题发布样式表,但您删除了它。你还想要答案吗?

标签: glassfish timeout jax-ws http-post


【解决方案1】:

Glassfish 的默认 JAX-WS 运行时是 Metro 2.0。请参阅Metro guide 中的5.6. HTTP Timeouts 部分,因此我们有:

// setConnectTimeout()
int timeout = ...;
Map<String, Object> ctxt = ((BindingProvider)proxy).getRequestContext();
ctxt.put(JAXWSProperties.CONNECT_TIMEOUT, timeout);

// setReadTimeout()
int timeout = ...;
Map<String, Object> ctxt = ((BindingProvider)proxy).getRequestContext();
ctxt.put("com.sun.xml.ws.request.timeout", timeout);

仅供参考,您可以看到Websphere有三个参数(在Metro 2.0中只有两个),分别是:

  1. CONNECTION_TIMEOUT:WebSphere JAX-WS 客户端等待建立 http/https 连接的时间(默认为 180 秒)
  2. WRITE_TIMEOUT:客户端等待完成发送请求的时间(默认为 300 秒)
  3. RESPONSE_TIMEOUT:客户端等待完成接收响应的时间(默认为 300 秒)

【讨论】:

  • 感谢 Paul,我也尝试过添加读取超时,但没有任何区别。我怀疑这 20 秒可能是防火墙超时。
  • 你可以用JAX-WS Hello World Example做一点本地测试,但是在返回问候字符串之前放一个Thread.sleep(1000*seconds);。标准 JDK 使用 Metro 作为 JAX-WS 运行时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多