我可以全局设置HTTP连接的超时吗?
我有一个程序,它使用javax.xml.ws.Service
来调用由WSDL定义的远程服务。 此程序在Google App Engine上运行,默认情况下,将HTTP连接超时设置为5
秒{1}。 我需要增加此超时值,因为此服务通常需要很长时间才能响应,但由于此请求不是通过URLConnection
,我无法弄清楚如何调用URLConnection.setReadTimeout(int)
{2},或以其他方式更改超时。
有没有办法在App Engine上全局设置HTTP连接超时? 而且,为了分享知识,人们将如何解决这类问题呢?
{1}: https : //developers.google.com/appengine/docs/java/urlfetch/overview#Requests
{2}: http : //docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout(int)
您可以尝试设置此处记录的sun.net.client.defaultConnectTimeout
和sun.net.client.defaultReadTimeout
系统属性,例如
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
编辑
很抱歉,只需重新阅读并注意到这是在Google App Engine上。 我不确定,但考虑到Google和Oracle最近的诉讼关系,我猜测GAE没有运行Oracle JVM。 我会留下这个,以防其他人遇到类似的问题。
尝试这个:
Port port = service.getPort(endPointInterface); //or another "getPort(...)" ((BindingProvider) port).getRequestContext() .put(BindingProviderProperties.REQUEST_TIMEOUT, 30);
请参阅https://developers.google.com/appengine/docs/java/urlfetch/usingjavanet
您可以执行以下操作来获取URLConnection:
URL url = new URL("http://www.example.com/atom.xml"); URLConnection tempConnection = url.openConnection(); tempConnection.setReadTimeout(10);
对于使用JAX-WS的App Engine,您必须设置请求上下文(今天使用SDK 1.9.15进行测试)。 对于普通机器,您不能超过60秒,并且必须切换到更大的机器(Bx)以更好地使用任务队列。
对于本地测试,您通常会使用BindingProviderProperties.CONNECT_TIMEOUT和BindingProviderProperties.REQUEST_TIMEOUT,但它们不在App Engine JRE白名单上,您的代码检查可能会不断警告您。 但是可以使用等效的字符串:
com.sun.xml.internal.ws.connect.timeout com.sun.xml.internal.ws.connect.timeout
要部署到App Engine:
com.sun.xml.ws.connect.timeout com.sun.xml.ws.request.timeout
如何将其应用于JAX-WS 2.x中自动生成的代码的完整示例,必须以毫秒为单位提供值:
@WebEndpoint(name = "Your.RandomServicePort") public YourServiceInterface getYourRandomServicePort() { YourRandomServiceInterface port = super.getPort(YOURRANDOMSERVICE_QNAME_PORT, YourRandomServiceInterface.class); Map requestContext = ((BindingProvider)port).getRequestContext(); requestContext.put("com.sun.xml.ws.connect.timeout", 10000); requestContext.put("com.sun.xml.ws.request.timeout", 10000); return port; }
- Eclipse,AppEngine:java.lang.RuntimeException:无法获取System Java Compiler。 请使用JDK,而不是JRE
- Java:动态属性
- 为什么在托管模式下运行GWT App Engine应用程序时会出现ClassNotPersistableException?
- 如何正确添加/操纵实体组中的数千名儿童?
- eclipse中的谷歌数据(gdata)与app引擎,java
- 为什么jsp:include(有时)导致Google App Engine上出现StackOverflowErrors?
- JDBC连接池与App Engine兼容
- 使用jersey-1.7在Google Appengine上进行多部分文件上传
- 如何使用Java客户端访问Google服务?