我正在开发基于桌面的应用程序,就像下拉框一样,我有一个函数downloadFile(long fileId)
,可以从web下载文件,应用程序的桌面端是在java中写入Web服务的.Net
我使用netbeans生成了WS客户端
问题是:有时会发生downloadFile(long fileId)
函数卡住,
它背后的原因是什么,我想如果Web服务功能在给定时间内没有给出任何响应,我会从该功能中取回控制并在一段时间后生成新的呼叫。是否可以使用java?
编辑我认为如果可以将请求时间设置为Web服务,但我不知道如何在netbeans生成的客户端中设置超时
答案 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
的方法会导致调用因某种异常而失败。
干杯,