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

SQL Anywhere 11.0.1 (日本語) » QAnywhere » モバイル Web サービス » Web サービス要求の作成

 

非同期の Web サービス要求

非同期の Web サービス要求は、モバイル Web サービス・アプリケーションがまれにしかネットワークに接続しない場合に有用です。この方法では、サービス・バインディング・クラスでメソッドの呼び出しを行ったときに Web サービス要求が作成され、作成された要求は出力キューに置かれます。メソッドは WSResult を返します。この WSResult は、応答のステータスについて後から問い合わせるときに使用できます。アプリケーションを再起動した後でも使用できます。

次の例では、USD から CAD への為替レートを取得する非同期の要求を作成します。

// 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 インタフェースは、非同期イベントを扱うための 2 つのメソッドを定義します。

  • 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();
   }
}