我有一个简单的Java Web客户端,它连接到在localhost上运行的HTTP Binding上的WSDL服务。我在WSDL服务中编写了一个方法,它将一个double变量返回给客户端。我会在我的后续课程中使用该变量。我使用ScheduledExceutorService线程以10ms的速率定期扫描WSDL服务的价格。
有时我从服务中获取数据,有时我无法获得。这不是问题,它就是这样发生的。我想要的只是,这需要基于事件。也就是说,只有当我从WSDL服务获取数据时,我才能抓住它。我的执行程序线程不断扫描wsdl服务。如何通过编写基于事件的程序来消除这种情况。我已经看到了以下链接,但我对我的情况有点困惑。
这是我的代码:
import com.microsoft.schemas._2003._10.serialization.arrays.ArrayOfstring;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class GetLTPData implements Runnable{
public static ArrayOfstring al=new ArrayOfstring();
public static List<String> list = new ArrayList<String>();
String symbol ="GC";
String exg = "NDF";
String expiry = "201706";
String security = "FUT";
public static double getLTPdata(String symbol,String exchange,String expiry,String securitytp) throws InterruptedException {
try{
al = javaItem(symbol,exchange,expiry,securitytp);
}
catch( Exception e ){
}
list = al.getString();
if(list.size()== 0)
throw new InterruptedException();
else
return Double.parseDouble(list.get(0));
}
@Override
public void run() {
try{
getLTPdata(symbol,exg,expiry,security);
}
catch(InterruptedException ie){
System.err.println(ie.getMessage());
}
}
//下面是我正在调用的C#服务 private static ArrayOfstring javaItem(java.lang.String symbol,java.lang.String exchange,java.lang.String expiryDate,java.lang.String securityType){
org.tempuri.JavaBroadCastEx service = new org.tempuri.JavaBroadCastEx();
org.tempuri.IJavaBroadCast port = service.getBasicHttpBindingIJavaBroadCast();
return port.javaItem(symbol, exchange, expiryDate, securityType);
}
public static void main(String[] args){
GetLTPData data = new GetLTPData();
ScheduledExecutorService executor1 = Executors.newScheduledThreadPool(2);
// Create Repetitive task for every 100ms
ScheduledFuture<?> result = executor1.scheduleAtFixedRate(data, 10, 10, TimeUnit.MILLISECONDS);
}
}