如何证明套接字连接超时发生在60秒内?

时间:2012-03-27 14:53:46

标签: java http google-app-engine timeout

我知道获取URL的套接字超时是固定的60秒。

我使用java.util.logging,在我调用https函数之前,我记录了这个:

2012-03-27 14:46:15.445 TelenorClient changeSimStatus:尝试1 ....

5秒后发生异常

2012-03-27 14:46:20.197 TelenorClient changeSimStatus:exception java.net.SocketTimeoutException:获取时超时:https://serviceportal ...

我使用的是基于JAX-WS的Web服务客户端,根据以下消息,不允许使用BindingProviderProperties和RequestContext设置超时:

Google App Engine的Java运行时环境不支持

com.sun.xml.internal.ws.client.BindingProviderProperties

这与Google App Engine有自己设置超时的第一个声明相对应。但同样,对我来说,它似乎要短于60秒。

我正在寻找有关如何解决此问题的提示。

2 个答案:

答案 0 :(得分:3)

URL Fetch服务(由JAX-WS客户端使用)为limited to 5 seconds timeout。您可以通过setConnectTimeout()将其延长至最多60秒。更多(最多10分钟)您必须通过任务队列或Cron执行它。

<强>更新

如果您的JAX-WS客户端没有授予您访问连接的权限,那么您可以尝试在任务队列上执行整个JAX-WS调用。这是通过DeferredTask最简单的方式完成的。

答案 1 :(得分:2)

我从Mitch Rudominer得到了这个提示;只需使用常量的文本值。

Map<String, Object> context = ((BindingProvider) service).getRequestContext();
context.put("com.sun.xml.ws.request.timeout", 60*1000);
context.put("com.sun.xml.ws.connect.timeout", 10*1000);

看起来它正在运作:

  

2012-07-03 14:26: 45 .604   com.simservices.bus.kpndata.DataDetailsS​​ervlet getDetailData:   2012-04-01 - 8931084711061420005

     

2012-07-03 14:26: 56 .183   com.simservices.bus.kpndata.DataDetailsS​​ervlet getDataUsage:getting   来自KPN

的数据响应      

2012-07-03 14:27: 33 .619   com.simservices.bus.kpndata.DataDetailsS​​ervlet getDataUsage:   detailsList有4612个元素

     

2012-07-03 14:27: 36 .540   com.simservices.bus.kpndata.DataDetailsS​​ervlet getDataUsage:已添加   4612个数据元素