JAVA中的自定义C#喜欢事件?

时间:2017-07-18 04:20:19

标签: java c# web-services event-handling

我有一个简单的Java Web客户端,它连接到在localhost上运行的HTTP Binding上的WSDL服务。我在WSDL服务中编写了一个方法,它将一个double变量返回给客户端。我会在我的后续课程中使用该变量。我使用ScheduledExceutorService线程以10ms的速率定期扫描WSDL服务的价格。

有时我从服务中获取数据,有时我无法获得。这不是问题,它就是这样发生的。我想要的只是,这需要基于事件。也就是说,只有当我从WSDL服务获取数据时,我才能抓住它。我的执行程序线程不断扫描wsdl服务。如何通过编写基于事件的程序来消除这种情况。我已经看到了以下链接,但我对我的情况有点困惑。

creating Event in Java

这是我的代码:

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);

    }
}

0 个答案:

没有答案