Asynchrone Webdienstanforderungen sind sinnvoll, wenn die Anwendung für mobile Webdienste nur gelegentlich mit einem Netzwerk verbunden ist. Bei dieser Methode erfolgt eine Webdienstanforderung durch den Aufruf einer Methode in der Dienstbindungsklasse, um die Anforderung in eine ausgehende Warteschlange zu stellen. Die Methode gibt ein WSResult zurück, das benutzt werden kann, um den Status der Antwort zu einem späteren Zeitpunkt abzurufen, auch nachdem die Anwendung neu gestartet wurde.
Im folgenden Beispiel wird die asynchrone Anforderung nach dem Wechselkurs von USD in CAD abgeschickt:
// 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" ); } |
Sie können auch einen WSListener verwenden, um einen asynchronen Callback zu erhalten, wenn die Antwort auf eine Webdienstanforderung verfügbar ist. Zum Beispiel:
// 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() ); |
Die WSListener-Schnittstelle definiert zwei Methoden für die Verarbeitung von asynchronen Ereignissen:
OnResult Eine OnResult-Methode wird implementiert, um eine Antwort an eine Webdienstanforderung abzuwickeln. Sie erhält ein WSResult-Objekt, das das Ergebnis der Webdienstanforderung darstellt.
OnException Eine OnException-Methode wird implementiert, um Fehler zu verarbeiten, die während der Verarbeitung der Antwort auf die Webdienstanforderung auftreten können. Ihr wird ein WSException-Objekt und ein WSResult-Objekt übergeben. Das WSException-Objekt enthält Informationen über den aufgetretenen Fehler und das WSResult-Objekt kann verwendet werden, um die Anforderungs-ID zu erhalten, zu der die Antwort gehört.
// 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(); } } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |