Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование WEBServices в ActionScript3, for newbies ))) 
:(
    Опции темы
AntonioBanderaz
  Дата 21.1.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Надеюсь все знают что такое WebService, а для тех, кто не в курсе google->WevService+WSDL
для начала надо сделать простой webService, например на java )
Нам понадобится tomcat, axis и xerces. Как настроить webService на java - ищем в FAQ, повторятся не буду )
Исходный код сервиса )
Код

public class TestService {
     public String getName() {
           return "This is test service! YO ))))";
     }

     public String getSumm(int a, int b) {
           return String.valueOf(a + b);
     }
}



Зы. Ещё нужно скачать либу для flex - cairngorm И соответственно добавить к прожекту )

Переходим к Flex )
Описание нашего сервиса service.mxml
Код

<?xml version="1.0" encoding="utf-8"?>
<cairngorm:ServiceLocator 
    xmlns:cairngorm="com.adobe.cairngorm.business.*"
    xmlns:mx="http://www.adobe.com/2006/mxml">
    
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
        ]]>
    </mx:Script>
    <!-- result="event.token.resultHandler(event);" 
         fault="event.token.faultHandler(event);" -->
    <mx:WebService 
        id="Service" 
        useProxy="false" 
        makeObjectsBindable="false"
        showBusyCursor="true"
        fault="mx.controls.Alert.show('Error loading WSDL', 'Webservice Error!!');" >
        <mx:operation name="getName" resultFormat="object" result="event.token.resultHandler(event);" 
         fault="event.token.faultHandler(event);">
        </mx:operation>
        <mx:operation name="getSumm" resultFormat="object" result="event.token.resultHandler(event);" 
         fault="event.token.faultHandler(event);">
            <mx:request>
             <a></a>
             <b></b>
            </mx:request>
        </mx:operation>    
    </mx:WebService>
</cairngorm:ServiceLocator>


Создаём делегат нашего метода, допустим SummDelegate.as
Код

        import mx.controls.Alert; // Чтобы вызвать Alert
    import mx.rpc.Fault;
    import mx.rpc.AbstractOperation;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.soap.mxml.WebService;
    import mx.rpc.AsyncToken;
    import com.adobe.cairngorm.business.ServiceLocator;
    import com.adobe.cairngorm.business.Responder;
public class SummDelegate {

        private var responder:Responder;
        private var service:WebService;

        public SummDelegate(r:Responder)
        {
                // Получение инстанса веб сервиса
                service = ServiceLocator.getInstance().getService("Service") as WebService;
                // Тут у нас Responder
                responder = r;
        }


        public function getSumm(int a, int b):void {
                var o:AbstractOperation = service.getOperation("getSumm");
        o.arguments.a = a;
        o.arguments.b = b;
            
        var token:AsyncToken = service.getSumm();
        token.resultHandler = responder.onResult;
        token.faultHandler = responder.onFault;
        }

        public function getSumm_onResult(event:ResultEvent):void
    {
        responder.onResult(new ResultEvent(ResultEvent.RESULT, false, true));
    }
        
    public function getSumm_onFault(event:FaultEvent):void
    {
        //
    }
}


SummEvent.as
Код

import com.adobe.cairngorm.control.CairngormEvent;

public class SummEvent extends CairngormEvent
{
    
    public var a:int;
    public var b:int;
    public static var SUMM:String = "SUMM";
    
    public function SummEvent(av, bv)
    {
        super(SUMM);
                a = av; b = bv;
    }
    
}


Модель ) ModelLocator.as
Код

import com.adobe.cairngorm.model.ModelLocator;
import mx.controls.Label;

[Bindable]
public class ModelLocator implements com.adobe.cairngorm.model.ModelLocator
{
    private static var modelLocator:ModelLocator;
    
    public var resultComponent:Label;
    
    public static function getInstance():ModelLocator
    {
        if (modelLocator == null)
            modelLocator = new ModelLocator(); 
        return modelLocator;
    }
   
   public function ModelLocator() 
   {
    if ( com.flexsqladmin.sqladmin.model.ModelLocator.modelLocator != null )
                throw new Error( "Only one ModelLocator instance should be instantiated" );
   } 
}



Определим контроллер )
Код

import com.adobe.cairngorm.control.FrontController;
public class Controller extends FrontController
{
    public function Controller()
    {
        addCommand(SummEvent.SUMM, SummCommand);
    }
}


SummCommander.as
Код

import com.adobe.cairngorm.business.Responder;
import com.adobe.cairngorm.commands.Command;
import com.adobe.cairngorm.control.CairngormEvent;
import flash.events.Event;
import mx.controls.Alert;

public class SummCommand implements Command, Responder
{    
        private var model:ModelLocator = ModelLocator.getInstance();
    public function execute(event:CairngormEvent):void
    {
        var delegate:SummDelegate = new SummDelegate(this);
        delegate.getSumm(SummEvent(event).a, SummEvent(event).b);
    }

    public function onResult(event:*=null):void
    {
        var r:String = event.result as String;
                trace(r);
                model.resultComponent.text = "Результат: " + r;
         
    }
    public function onFault(event:*=null):void
    {
        trace("Fuck!!!");
                model.resultComponent.text = "ОШИБКА";
    }
}


теперь используем что получилось ) тестим на валидность )
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    xmlns:business="*" 
    xmlns:control="*"
    creationComplete="init();">
    <mx:Script> 
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.soap.mxml.WebService;
            import com.adobe.cairngorm.business.ServiceLocator;
            import com.adobe.cairngorm.control.CairngormEventDispatcher;
            
            [Bindable]
            private var model:ModelLocator = ModelLocator.getInstance();
            
            public function init():void{
                model.resultComponent = result;

             var wsdl:String = "path/to/service?wsdl";
             try{
                 var s:WebService = ServiceLocator.getInstance().getService("Service") as WebService;
                    s.loadWSDL(wsdl);
             } catch (e:Error){
                 mx.controls.Alert.show("Error Loading WSDL", "WSDL Error");
             }                
            }
            
            private function btnClick():void {
                var smEvent:SummEvent = new SummEvent(aText.text as int, bText.text as int);
             CairngormEventDispatcher.getInstance().dispatchEvent(smEvent);
            }

        ]]>
    </mx:Script>
    
    <!-- the ServiceLocator where we specify the remote services -->
    <business:Services id="Services" />
    
    <!-- the FrontController, containing Commands specific to this appliation -->
    <control:Controller id="controller" />


    <mx:Panel x="29" y="25" width="385" height="167" layout="absolute" title="Тестируем веб сервис">
        <mx:Label x="10" y="10" text="Введите первое число"/>
        <mx:TextInput x="148" y="8" width="207" id="aText"/>
        <mx:Label x="10" y="38" text="Введите второе число"/>
        <mx:TextInput x="148" y="36" width="207" id="bText"/>
        <mx:Label x="10" y="64" text="Результат:" width="345" id="result"/>
        <mx:Button x="10" y="90" label="Тест" width="345" click="btnClick();"/>
    </mx:Panel>
</mx:Application>


Это сообщение отредактировал(а) AntonioBanderaz - 21.1.2007, 17:57


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 21.1.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



http://java.sys-con.com/read/210991_1.htm

Добавлено @ 18:16 
Flex Data Services smile

PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 21.1.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Цитата(AlDev @  21.1.2007,  18:16 Найти цитируемый пост)
http://java.sys-con.com/read/210991_1.htm

Добавлено @ 18:16 
Flex Data Services smile



Не, я в общем смысле, как во flash общаться с soap rpc smile 

Flex Data Services это хорошо, когда java, а когда какой-нидь дотнет, там WebServices )


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0724 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.