Zurück   Flashforum > Flash und Server > Flash mit XML und Webservices

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-10-2008, 09:38   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2008
Beiträge: 8
WDSL methode noch mal aufrufen

hi leute

hab mich mal wieder mit flash befasst...
vileicht kann mir ja jemand helfen, da ich hier was nicht so ganz verstehe.
ich erstelle in flash ein webservice und rufe meine methode "getData" mit einem pendingcall object auf. das erste mal erhalte ich auch ein xml das ich parsen kann. nun ist es aber so, das ich die daten in einem bestimmten zeitintervall wieder vergleichen/aktualisieren möchte, da die sich ja ändern können. dafür verwende ich setInteval, der die selbe funktion mit dem methodenaufruf einfach noch mal abarbeitet. das wdsl möchte ich natürlcih nicht jedesmal neu erstellen weil das kann er sich ja merken, oder das sollte flash sich merken!
aber irgendwo verliert flash den bezug zu dem webservice object und kann nicht mehr auf das pendingcall zugreiffen, da das ja noch auserhalb von function recall definiert werden muss.

hat jemand eine idee, lösung um einen recall auf methoden des wdsl zu machen? ohne das wdsl jedesmal neu zu erstellen...

der code:


import mx.services.*;

var myWS_obj:WebService = new WebService(wsdlURI);
var request:PendingCall;

function reCall(){
trace("--[ R E C A L L ]--");
clearInterval(_root.interval_GetData);
_root.request = _root.myWS_obj.getData();
_root.interval_GetData = setInterval(_root,'reCall',10000);
}
reCall();

request.onResult = function (result){
var oaXML:XML = new XML();
oaXML = result.toString();
oaXML.ignoreWhite = true;
_root.oaInfo = new XML2Object().parseXML(oaXML);
init();
}

myWS_obj.onLoad = function(){
trace("--[ O N L O A D ]--");
trace("\n SOAP Request: " + ws.request);
trace("\n SOAP Response: " + ws.response);
trace("\n Data result: " + result);
trace("\n Data getOutputValue(0): " + ws.getOutputValue(0) );
trace("\n Data getOutputValues: " + ws.getOutputValues );
}
request.onFault = function (Error:Object){
trace("faultcode "+Error.faultcode+"\n faultstring "+Error.faultstring+"\n detail "+Error.detail+"\n element "+Error.element+"\n faultactor "+Error.faultactor);
};
ElAdam ist offline   Mit Zitat antworten
Alt 14-10-2008, 10:59   #2 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Ich vermute mal, dass es daran liegt, dass bei jeder erneuten Zuweisung des zurückgegebenen PendingCall-Objekts an request auch die onResult und onFault-Handler überschrieben werden. (Der WebService liefert ja jedes Mal ein neues PendingCall-Objekt für jeden Aufruf zurück.).
Das heisst, du müsstest jeweils nach der erneuten Zuweisung auch die Handler neu zuweisen!

Versuchs mal so:
PHP-Code:
import mx.services.*;

var 
myWS_obj:WebService = new WebService(wsdlURI);
var 
request:PendingCall;

myWS_obj.onLoad = function(){
    
trace("--[ O N L O A D ]--");
    
trace("\n SOAP Request: " ws.request);
    
trace("\n SOAP Response: " ws.response);
    
trace("\n Data result: " result);
    
trace("\n Data getOutputValue(0): " ws.getOutputValue(0) );
    
trace("\n Data getOutputValues: " ws.getOutputValues );
    
reCall(); //<-- ich würde mit dem Aufruf warten, bis die WSDL geladen und geparst ist, auch wenn Aufrufe in die Queue gehauen werden.
}

function 
reCall(){
    
trace("--[ R E C A L L ]--");
    
clearInterval(_root.interval_GetData);
    
_root.request _root.myWS_obj.getData();
    
_root.request.onResult handleResult//<-- hier den result-Handler zuweisen!
    
_root.request.onFault handleFault//<-- hier den fault-Handler zuweisen!
    
_root.interval_GetData setInterval(_root,'reCall',10000);
}

function 
handleResult(result){
    var 
oaXML:XML = new XML();
    
oaXML result.toString();
    
oaXML.ignoreWhite true;
    
_root.oaInfo = new XML2Object().parseXML(oaXML);
    
init();
}
function 
handleFault(Error:Object){
    
trace("faultcode "+Error.faultcode+"\n faultstring"+Error.faultstring+"\n detail "+Error.detail+"\n element "+Error.element+"\n faultactor "+Error.faultactor);
}; 
Was ich geändert habe:
  1. reCall erst aufrufen, wenn WSDL geladen und geparst
  2. onResult und onFault als Funktionen geschrieben (handleResult und handleFault)
  3. Zuweisung des result- und fault-Handlers als Funktion in der reCall-Funktion.
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 14-10-2008, 11:50   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2008
Beiträge: 8
genial

die idee mit dem überschreiben der handler finde ich sehr gut das funtz übrigens auch super. fettes dankeschön

habe vor dem mittag jedoch noch was gelesen, und dachte mir wer lesen kann ist klar im vorteil


Zitat:
livedocs
Der Flash Player setzt alle Aufrufe, die Sie tätigen, bevor die WSDL geparst wird, in eine Warteschlange und versucht, sie auszuführen, nachdem die WSDL geparst wurde. Der Grund hierfür ist, dass die WSDL Informationen enthält, die zum korrekten Kodieren und Senden einer SOAP-Anforderung benötigt werden. Funktionsaufrufe, die Sie tätigen, nachdem die WSDL geparst wurde, müssen nicht in eine Warteschlange gesetzt werden; sie werden sofort ausgeführt.
finde das überschreiben aber immer noch die bessere lösung, weil es kann ja doch noch vorkommen das der server die antwort verzögert.
ElAdam ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele