2012-03-28 20 views
0

Ich habe ein Problem mit dem Aufruf von Web-Service von flex. Ich habe einen Dienst mit dem Namen UserService mit einer Methodenkette GetData (int i). Ich möchte diese Methode von flex nennen und Daten erhalten. Mein Code ist hier:So rufen Sie Web-Service von 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); 
     } 

Könnte meine Frage ist nicht schwer, aber ich kann nicht verstehen, warum es funktioniert does .. Kann mir jemand helfen?

Service-Code, von flex generiert, wenn ich Verweis auf servese hinzugefügt.

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; 
    } 

} 

geerbt Klasse:

public class UserService extends _Super_UserService 
{ 

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

} 
+0

Ohne den Code zu sehen, die tatsächlich den Dienst ruft, ist es schwer zu wissen, was los ist. Zeig uns den Code für den UserService! – JeffryHouser

+0

Ich bin mir nicht sicher, ob ich das verstehe. .net Code oder Code, der von flex generiert wurde? – Radislav

+0

Ich habe meine Frage aktualisiert. – Radislav

Antwort

4

Ihre Userservice-Klasse löst nie eine Veranstaltung namens "Hallo"; Daher wird Ihr Ergebnishandler nie ausgelöst. Ich denke, Sie müssen einen Ergebnishandler zum ASynctoken hinzufügen.

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

weitere Informationen über die AsyncResponder und AsyncToken

+0

Danke, ich werde es später überprüfen. Ich hoffe es hilft. – Radislav

+0

Ich habe alles, was du gesagt hast, aber es funktioniert überhaupt nicht. echoResultHandler wurde nicht aufgerufen ... Ich verstehe nicht warum :( – Radislav

+0

Danke, ich fand den Grund meines Problems auf http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/mx/rpc/ AsyncResponder.html # AsyncResponder% 28% 29 – Radislav

Verwandte Themen