Автор Оригинала:
rdgrimes
Оригинал:
Web Services and Document-oriented Operations
Проблема
В документации не хватает главы о том, как использовать Document Oriented WSDL файлы.
Решение
Вот простой пример "login" веб сервиса, который вызывает документо ориентированный метод.
Объяснение
Код:
import mx.rpc.soap.WebService;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private var sessionID:String = new String('');
// Login user
public function login(event:flash.events.Event):void
{
// create login object with 'UserID' and 'Password' properties.
var login:Object = new Object();
login.UserID = userID_txt.text.toUpperCase();
login.Password = password_txt.text.toUpperCase();
// define the loginWS web service, load the wsdl
// and then execute the operation, passing to it
// the above defined login object.
loginWS.useProxy = false;
loginWS.LoginOperation.addEventListener("result", loginResultHandler);
loginWS.LoginOperation.resultFormat = 'e4x';
loginWS.addEventListener("fault", loginFaultHandler);
loginWS.loadWSDL('https://www.mydomain.com/Login.wsdl');
loginWS.LoginOperation(login);
}
// Handle results from login web service
private function loginResultHandler(event:ResultEvent):void
{
// retrieve web service results
var xmlDoc:XML = new XML(loginWS.LoginOperation.lastResult);
sessionID = xmlDoc.*::User.@Session;
}
// Handle faults from login web service
private function loginFaultHandler(event:FaultEvent):void
{
Alert.show("Some error message here.");
}
Главное различие между
RPC и Документо Ориентированными операциями состоит в том, как операции вызываются. RPC операции вызываются следующим образом:
Код:
loginWS.LoginOperation(userID_txt.text, password_txt.text);
В то время, как в Документо Ориентированных операциях, вы должны сначала создать объект (чаще всего используется паттерн проектирования -
DTO/VO), добавить параметры, которые вы хотите отправить операции, и уже потом передать его как аргумент, как показанно в примере ниже:
Код:
// create login object with 'UserID' and 'Password' properties.
var login:Object = new Object();
login.UserID = userID_txt.text.toUpperCase();
login.Password = password_txt.text.toUpperCase();
...
loginWS.LoginOperation(login);