Как позвонить в веб-сервис из flex - PullRequest
0 голосов
/ 29 марта 2012

У меня возникла проблема с вызовом веб-сервиса из flex.У меня есть сервис с именем UserService с одной строкой метода GetData (int i).Я хочу вызвать этот метод из flex и получить данные.Мой код здесь:

                    protected function application1_creationCompleteHandler(event:FlexEvent):void
        {
            uService = new UserService();
            uService.addEventListener("hello", echoResultHandler);
            uService.GetData(1);                            
        }

        public function echoResultHandler(event:ResultEvent):void { 
            var retStr:String = event.result as String;                 
            var retInt:int = event.result.echoInt; 
            Alert.show('want to play', retStr);
        } 

Возможно, мой вопрос не сложный, но я не могу понять, почему он не работает .. Кто-нибудь может мне помочь?

Сервисный код,генерируется flex, когда я добавил ссылку на servese.

    internal class _Super_UserService extends com.adobe.fiber.services.wrapper.WebServiceWrapper
{


    public function _Super_UserService()
    {

        _serviceControl = new mx.rpc.soap.mxml.WebService();
        var operations:Object = new Object();
        var operation:mx.rpc.soap.mxml.Operation;

        operation = new mx.rpc.soap.mxml.Operation(null, "GetData");
         operation.resultType = String;
        operations["GetData"] = operation;

        _serviceControl.operations = operations;
        try
        {
            _serviceControl.convertResultHandler = com.adobe.serializers.utility.TypeUtility.convertResultHandler;
        }
        catch (e: Error)
        {  }


        preInitializeService();
        model_internal::initialize();
    }

    protected function preInitializeService():void
    {


        _serviceControl.service = "UserService";
        _serviceControl.port = "BasicHttpBinding_IUserService";
        wsdl = "http://localhost:3905/UserService.svc?wsdl";
        model_internal::loadWSDLIfNecessary();
    }

    public function GetData(value:int) : mx.rpc.AsyncToken
    {
        model_internal::loadWSDLIfNecessary();
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("GetData");
        var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(value) ;
        return _internal_token;
    }

}

Унаследованный класс:

public class UserService extends _Super_UserService
{

    protected override function preInitializeService():void
    {
       super.preInitializeService();
       // Initialization customization goes here
    }

}

1 Ответ

4 голосов
/ 29 марта 2012

Ваш класс UserService никогда не отправляет событие с именем "hello"; поэтому ваш обработчик результатов никогда не будет запущен. Я думаю, вам нужно добавить обработчик результатов в ASynctoken.

var call : Asynctoken =  uService.GetData(1);   
call.addResponder( new AsyncResponder(echoResultHandler) );

больше информации о AsyncResponder и AsyncToken

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...