我知道获取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秒。
我正在寻找有关如何解决此问题的提示。
答案 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.DataDetailsServlet getDetailData: 2012-04-01 - 8931084711061420005
2012-07-03 14:26: 56 .183 com.simservices.bus.kpndata.DataDetailsServlet getDataUsage:getting 来自KPN
的数据响应2012-07-03 14:27: 33 .619 com.simservices.bus.kpndata.DataDetailsServlet getDataUsage: detailsList有4612个元素
2012-07-03 14:27: 36 .540 com.simservices.bus.kpndata.DataDetailsServlet getDataUsage:已添加 4612个数据元素