我正在开发一个基于桌面的应用程序,就像投递箱一样,我有一个功能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
,导致调用失败并出现某种异常。
干杯