非同期の 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(); } } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |