仅在移动 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(); } } |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |