如何设置Web服务客户端(Java)的请求超时时间

3
我正在开发一个桌面应用程序,类似于Dropbox。我有一个函数downloadFile(long fileId),可以从Web下载文件。应用程序的桌面端是使用Java编写的,而Web服务是使用.Net编写的。
我使用NetBeans生成了WS客户端。
问题在于:有时候downloadFile(long fileId)函数会卡住。
无论原因如何,如果Web服务函数在一定时间内没有响应,我希望能够从该函数中夺回控制权,并在一段时间后生成新的调用。这是否可能使用Java实现?
编辑:我认为可以通过设置Web服务的请求超时来实现,但我不知道如何在NetBeans生成的客户端中设置超时。
2个回答

5

在Web服务的根类FileUpload中(由NetBeans生成),有一些构造函数和超类的函数,其中一个我用来创建SOAP对象。它看起来像这样:

@WebEndpoint(name = "FileUploadSoap")
public FileUploadSoap getFileUploadSoap() {
   return super.getPort(new QName("http://svc.qleapahead.com/", 
    "FileUploadSoap"), FileUploadSoap.class);
    }

在这个函数中,我进行了一些修改以设置超时参数,变成了以下形式:
@WebEndpoint(name = "FileUploadSoap")
public FileUploadSoap getFileUploadSoap() {
    FileUploadSoap fileUploadSoap = super.getPort(new QName(
            "http://svc.qleapahead.com/", "FileUploadSoap"),
            FileUploadSoap.class);
    ((BindingProvider) fileUploadSoap).getRequestContext().put(
            "com.sun.xml.internal.ws.request.timeout", 1000 * 2 * 60);
    return fileUploadSoap;
}

问题解决了...

简而言之,这个声明对我帮助很大。

((BindingProvider) fileUploadSoap).getRequestContext().put(
                "com.sun.xml.internal.ws.request.timeout", 1000 * 2 * 60);

1

根据您用于调用Web服务的框架,会有一些设置readTimeout的方法,导致调用失败并抛出某种异常。

祝好!


1
我的 Web Service 是基于 SOAP 的,并使用 NetBeans 生成客户端来消费 Web Service,你能解释一下如何设置 readTimeOut 吗? - NoNaMe
1
readTimeOut是HTTP连接上的一个属性。我不熟悉Netbeans,但也许这个线程会有所帮助:https://dev59.com/x2kw5IYBdhLWcg3w9vJ- - Anders R. Bystrup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接