Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » QAnywhere » 移动 Web 服务 » Web 服务请求

 

异步 Web 服务请求

仅在移动 Web 服务应用程序不定时地连接至网络时,异步 Web 服务请求才有用。使用此方法,通过调用服务绑定类中的方法来发出 Web 服务请求,以将请求放置在外发队列中。该方法返回 WSResult,该结果可在以后(甚至是应用程序被重新启动之后)用来查询响应的状态。

下面的示例发出一个异步请求以获得美元对加元的汇率:



// C#
WSResult r = service.AsyncConversionRate( Currency.USD, Currency.CAD );
  
// Get the request ID.  Save it for later use if necessary.
string reqID = r.GetRequestID();

// Later: get the response for the specified request ID
WSResult r = service.GetResult( reqID );
if( r.GetStatus() == WSStatus.STATUS_RESULT_AVAILABLE ) {
  Console.WriteLine( "The conversion rate is " + r.GetDoubleValue( "ConversionRateResult" ) );
} else {
  Console.WriteLine( "Response not available" );
} 
// Java
WSResult r = service.asyncConversionRate( NET.webserviceX.Currency.USD, NET.webserviceX.Currency.CAD );
     
// Get the request ID.  Save it for later use if necessary.
String reqID = r.getRequestID();

// Later: get the response for the specified request ID
WSResult r = service.getResult( reqID );
if( r.getStatus() == WSStatus.STATUS_RESULT_AVAILABLE ) {
    System.out.println( "The conversion rate is " + r.getDoubleValue( "ConversionRateResult" ) );
} else {
    System.out.println( "Response not available" );
}

当可获得对 Web 服务请求的响应时,还可使用 WSListener 获取异步回调。例如:



// C#
// Make a request to get the USD to CAD exchange rate
WSResult r = service.AsyncConversionRate( Currency.USD, Currency.CAD );
  
// Register a listener for the result
service.SetListener( r.GetRequestID(), new CurrencyConvertorListener() );

// Java
// Make a request to get the USD to CAD exchange rate
WSResult r = service.asyncConversionRate( NET.webserviceX.Currency.USD, NET.webserviceX.Currency.CAD );
     
// Register a listener for the result
service.setListener( r.getRequestID(), new CurrencyConvertorListener() );

WSListener 接口定义两种方法来处理异步事件:

  • OnResult   执行 OnResult 方法来处理对 Web 服务请求的响应。这样会传递表示 Web 服务请求的结果的 WSResult 对象。

  • OnException   执行 OnException 方法来处理在对 Web 服务请求的响应进行处理期间所产生的错误。这样会传递 WSException 对象和 WSResult 对象。WSException 对象包含有关发生的错误的信息,而 WSResult 对象可用来获得响应所对应的请求 ID。



// C#
class CurrencyConvertorListener : WSListener
{
   public CurrencyConvertorListener() {
   }

   public void OnResult( WSResult r ) {
    try {
         USDToCAD._statusMessage = "USD to CAD currency exchange rate: " + r.GetDoubleValue( "ConversionRateResult" );
    } catch( Exception exc ) {
        USDToCAD._statusMessage = "Request " + r.GetRequestID() + " failed: " + exc.Message;
    }
   }

   public void OnException( WSException exc, WSResult r ) {
    USDToCAD._statusMessage = "Request " + r.GetRequestID() + " failed: " + exc.Message;
   }
} 
// Java
private class CurrencyConvertorListener implements WSListener
{
  public CurrencyConvertorListener() {
  }
 
  public void onResult( WSResult r ) {
   try {
        USDToCAD._statusMessage = "USD to CAD currency exchange rate: " + r.getDoubleValue( "ConversionRateResult" );
   } catch( Exception exc ) {
        USDToCAD._statusMessage = "Request " + r.getRequestID() + " failed: " + exc.getMessage();
   }
   }

   public void onException( WSException exc, WSResult r ) {
        USDToCAD._statusMessage = "Request " + r.getRequestID() + " failed: " + exc.getMessage();
   }
}