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

时间:2012-12-14 11:51:33

标签: java web-services soap netbeans timeout

我正在开发基于桌面的应用程序,就像下拉框一样,我有一个函数downloadFile(long fileId),可以从web下载文件,应用程序的桌面端是在java中写入Web服务的.Net

我使用netbeans生成了WS客户端

问题是:有时会发生downloadFile(long fileId)函数卡住,

它背后的原因是什么,我想如果Web服务功能在给定时间内没有给出任何响应,我会从该功能中取回控制并在一段时间后生成新的呼叫。是否可以使用java?

编辑我认为如果可以将请求时间设置为Web服务,但我不知道如何在netbeans生成的客户端中设置超时

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

干杯,