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



我正在开发一个基于桌面的应用程序,就像投递箱一样,我有一个功能downloadFile(long fileId)从Web下载文件,应用程序的桌面端是java,其中Web服务是用.Net编写的

我已经使用 netbeans 生成了 WS 客户端

问题是:有时downloadFile(long fileId)功能卡住了,

无论它背后的原因是什么,我希望 Web 服务函数在给定时间之前没有给出任何响应,我从该函数中抢回控制权并在一段时间后生成一个新调用。可以使用Java吗?

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

在 Web 服务的根类(由 netBeans 生成)的类FileUpload中,有一些超类的类和函数的构造函数,其中一个我用来创建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);

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

干杯

相关内容

  • 没有找到相关文章

最新更新