3

我正在开发一个类似于 drop box 的基于桌面的应用程序,我有一个downloadFile(long fileId)从 web 为我下载文件的功能,应用程序的桌面端是在 java 中,其中 web 服务是用 .Net 编写的

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

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

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

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

4

2 回答 2

5

在作为FileUploadWeb 服务根类(由 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);
于 2012-12-18T16:11:19.123 回答
1

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

干杯,

于 2012-12-14T13:07:43.340 回答