Zurück   Flashforum > Flash und Server > Flash Remoting

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-03-2006, 12:36   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Question Vorgehensweise bei online Stellung des remote services?

ich möchte ein Projekt das auf meinem XAMP Server wunderbar funktioniert nun online verwenden.

Was gibt es dabei zu beachten?
Welche Schritte muss ich durchführen?
Und wie sehen diese im Detail aus?

Brauche dringend Hilfe dazu!

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Alt 05-03-2006, 12:22   #2 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Also es kann an vielem liegen.
Meistens liegt es an der unterschiedlichen Konfiguration des Testservers und deines Webspace. (evtl. unterschiedliche PHP-Version?)

Ich würde an deiner Stelle mal die PHP Version von XAMPP genau so konfigurieren wie auf deinen Webspace.

AmfPHP wird erst ab ~ PHP 4.x unterstützt, also solltest du mindestens diese Version besitzen.

Sonst sollte es eigentlich bei einer Standardkonfiguration funktionieren.
Aber ich kann auch nicht genau sagen, was in den einzelnen PHP-Versionen genau aktiviert sein muss.
Nur weiß ich das bei der AmfPHP 1.0 Beta allow_call_time_pass_reference = ON sein musste. Aber das Problem wurde in der Version AmfPHP 1.0 gefixt.
So wird es auch bei der aktuellen Version bei manchen Hostern zu Problemen kommen.

Was für ein Fehler wird den ausgespuckt? Bei NetConnection.Call.BadVersion ist es ein Problem auf der serverseitigen Seite (PHP)
messingfeld ist offline   Mit Zitat antworten
Alt 05-03-2006, 13:56   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Question

@messingfeld

erst einmal Danke das du dich bereit erklärst dich mit meinem Problem auseinanderzusetzen!

Also PHP Version auf dem Server ist: 4.3.11

Sollte demnach erst einmal funktionieren?!

es ist ein Linux system - muss dort die Pfadangabe in der amfphp gateway.php nicht anders aussehen als auf meinem localen xamp system?!

allow_call_time_pass_reference steht auf on

was für ein Pfad sollte denn in der gateway.php stehen, wenn sie in /html/flashservices/gateway.php liegt und der document_root in dem fall /home/kdn111/html/flashservices/gateway.php wäre?

Vielleich liegt es daran?
Allerdings habe ich ja auch schon die amfphp 1.2 Beta ausprobiert, und dort wird der Pfad automatisch generiert!

Weiß nun bald nicht mehr weiter. Schön das es local funktioniert!

---
Weiß leider auch noch nicht so ganz wie ich den NetConnectionDebugger anspreche und zum reagieren bringe. Habe bisher einfach immer NetDebug.initialize(); in die Flasch Datei oder in der Funktion in der entsprechenden Klasse eingebaut. Ich dachte das würde ausreichen, leider ohne Erfolg.

Geändert von crashT (05-03-2006 um 13:59 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 05-03-2006, 14:37   #4 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von crashT
allow_call_time_pass_reference steht auf on
Das war nur ein Beispiel.
Es sollte dir nur zeigen das AmfPHP evtl. einige Einstellungen benötigt die du auf deinem XAMPP Server auf ON hast und bei deinem online Webspace ebend nicht, also auf OFF.
Ich würde das erstmal angleichen und dann nochmal auf deinem XAMPP Server testen.

Was sagt den der NetConnection Debugger (Fenster -> Andere Bedienfelder -> NetConnection Debugger) wenn du den Service, über das Gateway auf deinem externen Webspace, aus der Flashumgebung aufrufst?
Du kannst auch mal in die PHP Methode die du aufrufst folgendes schreiben:
PHP-Code:
NetDebug::trace("Benutzerdefinierte Meldung"); 
Dies wird dann im NetConnection Debugger Fenster ausgegeben wenn keine (vermeintlichen) Fehler im Script sind.
messingfeld ist offline   Mit Zitat antworten
Alt 05-03-2006, 19:56   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Habe jetzt noch einmal ein bisschen getestet, in meinem eigenen Netzwerk funktioniert alles einwandfrei, selbst vom Laptop auf den Hostrechner.

Wenn ich versuche die Dateien auf dem Server anzusprechen bekomme ich zwar scheinbar eine Verbindung. - status = connect - allerdings kommt überhaupt nichts zurück nicht einmal mein NetDebug::trace('test');

Ist es nun eine einstellung der Rechte oder was ist da los?

Werde Morgen mal die PHP Einstellungen vergleichen.

Das komplette Script ist übrigens hier im Forum unter Daten mit AMFPHP, PHP und MySQL durch AS2 auslesen und an Flash übergeben natürlich angepasst auf die Servereinstellungen.

Geändert von crashT (05-03-2006 um 19:58 Uhr)
crashT ist offline   Mit Zitat antworten
Alt 05-03-2006, 21:14   #6 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Ich habe dein Script zwar nicht getestet, aber bevor du da noch mehr potentielle Fehlerquelle (MySQL) einbaust würde ich erstmal ein ganz einfaches Standardskript testen.

Hier mal ein "Hallo Welt":

PHP:
PHP-Code:
<?php
class HalloWelt
{
    function 
HalloWelt()
    {
        
$this->methodTable = array
        (
            
"sageHallo" => array
            (
                
"access" => "remote"
            
)
        );
    }

    function 
sageHallo()
    {
        return 
"Ich sage \"Hallo Welt!\".";
    }
}
?>
AS:
PHP-Code:
import mx.remoting.Connection;
import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
import mx.remoting.debug.NetDebug;
mx.remoting.debug.NetDebug.initialize();
//
// Gateway - URL und Service
var gatewayURL:String "gateway.php";
var 
meinService:String "HalloWelt";
// neue Verbindung
var con:Connection = new Connection();
// zentrale Ergebnis- oder Fehlerverarbeitung
var dataResp:RelayResponder = new RelayResponder(this"erfolgreich""fehlerhaft");
// Erstelle Verbindung zum Gateway
con.connect(gatewayURL);
// Definiere Service
var serv:Service = new Service(nullnullmeinServicecondataResp);
// Rufe Methoden auf
serv.sageHallo();
// bei Erfolg wird die Funktion aufgerufen:
function erfolgreich(meinErgebnis:ResultEvent) {
    
trace(meinErgebnis.result);
}
// Bei Fehler diese:
function fehlerhaft(meinFehler:FaultEvent) {
    
trace("Fehler: "+meinFehler.fault.faultstring);
    
trace("Code: "+meinFehler.fault.faultcode);
    
trace("Typ: "+meinFehler.fault.type);
    
trace("Detail: "+meinFehler.fault.detail);

messingfeld ist offline   Mit Zitat antworten
Alt 06-03-2006, 08:20   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@messingfeld

Danke das du dir so viel Arbeit mit mir machst!

Also das Script hatte eigentlich local gut funktioniert, hast du Fehler entdeckt?

Dein Bsp. ist richtig gut, vor allem die Fehlererkennung und Beschreibung. Das sind z. B. die Dinge mit denen ich mich noch garnicht beschäftigt hatte.

Werde es gleich einmal testen. Gebe dir dann Bescheid.

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Alt 06-03-2006, 08:27   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
@messingfeld

Super! Wo lag jetzt mein Fehler?

Bei deinem Script bekomme ich ein sauberes result!

Das wird ein langer Tag, aber ein guter Anfang!
crashT ist offline   Mit Zitat antworten
Alt 06-03-2006, 08:56   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Ich glaube das mein Problem darin liegt, das ich immer versuche den Service direkt über eine Klassendatei anzusprechen?!
Ich habe dein Bsp. mal nach meinem Muster das ich vorher verwendet habe umgebaut.

Die AS würde dann so aussehen:
PHP-Code:
// 
import mx.remoting.Connection;
import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
import mx.remoting.debug.NetDebug;
//
class HelloWelt {
    function 
HelloWelt() {
        
//

        //
        
mx.remoting.debug.NetDebug.initialize();
        
// Gateway - URL und Service
        
var gatewayURL:String "http://localhost/amfphp/gateway.php"//"http://localhost/amfphp/gateway.php"
        
var meinService:String "HalloWelt";
        
// neue Verbindung 
        
var con:Connection = new Connection();
        
// zentrale Ergebnis- oder Fehlerverarbeitung 
        
var dataResp:RelayResponder = new RelayResponder(this"erfolgreich""fehlerhaft");
        
// Erstelle Verbindung zum Gateway 
        
con.connect(gatewayURL);
        
// Definiere Service 
        
var serv:Service = new Service(nullnullmeinServicecondataResp);
        
// Rufe Methoden auf 
        
serv.sageHallo();
        
// bei Erfolg wird die Funktion aufgerufen: 
        
function erfolgreich(meinErgebnis:ResultEvent) {
            
trace(meinErgebnis.result);
        }
        
// Bei Fehler diese: 
        
function fehlerhaft(meinFehler:FaultEvent) {
            
trace("Fehler: "+meinFehler.fault.faultstring);
            
trace("Code: "+meinFehler.fault.faultcode);
            
trace("Typ: "+meinFehler.fault.type);
            
trace("Detail: "+meinFehler.fault.detail);
        }
    }

und die ausführende Flash Datei so:
PHP-Code:
this.hellowelt = new HelloWelt(); 
und das funktioniert dann nicht!

Wird der Klassenimport vielleicht nicht ordentlich durchgeführt? Stehen ja ausserhalb des eigentlichen Aufrufs?!

Wenn ich sie allerdings in die Flash Datei packe meckert logischerweise das AS Script.

???

aber so sieht z. B. der Vorschlag des Service Browsers von amfphp aus:
PHP-Code:
/**
 * This file generated by AMFPHP 1.0
 * You can get AMFPHP to generate code customized to your preferences
 * By modifying the /browser/templates/as2.tpl file
 */

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.RecordSet;
import mx.remoting.DataGlue;
import mx.utils.Delegate;
import mx.remoting.debug.NetDebug;

class 
HalloWelt
{
    
//Change the gateway URL as needed
    
private var gatewayUrl:String "http://localhost/amfphp/gateway.php";
    private var 
service:Service;

    function 
HalloWelt()
    {
        
NetDebug.initialize();
        
this.service = new Service(this.gatewayUrlnull"HalloWelt"nullnull);
        
    }
    
        
    
//    
    
function sageHallo()
    {
        var 
pc:PendingCall service.sageHallo();
        
pc.responder = new RelayResponder(this"handleSageHallo""handleRemotingError");
    }
        
        
    function 
handleSageHallo(re:ResultEvent)
    {
        
//Implement custom callback code
    
}
    
    function 
handleRemotingErrorfault:FaultEvent ):Void 
    
{
        
NetDebug.trace({level:"None"message:"Error: " fault.fault.faultstring });
    }

nach dem habe ich auch mein vorheriges script aufgebaut.
crashT ist offline   Mit Zitat antworten
Alt 06-03-2006, 09:14   #10 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
so, habe nun noch ein bisschen mit der Klasse probiert.

Laut meinem Wissen, sollte doch das hier auch funktionieren:
PHP-Code:
//
import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.RecordSet;
import mx.remoting.DataGlue;
import mx.utils.Delegate;
import mx.remoting.debug.NetDebug;
//
class HalloWelt {
    
//Change the gateway URL as needed
    
private var gatewayUrl:String "http://localhost/amfphp/gateway.php";
    private var 
service:Service;
    
//
    
function HalloWelt() {
        
NetDebug.initialize();
        
this.service = new Service(this.gatewayUrlnull"HalloWelt"nullnull);
    }
    
//    
    
function sageHallo() {
        var 
pc:PendingCall service.sageHallo();
        
pc.responder = new RelayResponder(this"handleSageHallo""handleRemotingError");
    }
    
//
    
function handleSageHallo(re:ResultEvent) {
        
trace(re.result);
    }
    
//
    
function handleRemotingError(fault:FaultEvent):Void {
        
trace("Fehler: "+fault.fault.faultstring);
        
trace("Code: "+fault.fault.faultcode);
        
trace("Typ: "+fault.fault.type);
        
trace("Detail: "+fault.fault.detail);
        
NetDebug.trace({level:"None"message:"Error: "+fault.fault.faultstring});
    }

mit dem Aufruf:
PHP-Code:
this.hallowelt = new HalloWelt();
this.hallowelt.handleSageHallo(); 
es kommt aber nur ein undefiened zurück???
crashT ist offline   Mit Zitat antworten
Alt 06-03-2006, 11:12   #11 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von crashT
mit dem Aufruf:
PHP-Code:
this.hallowelt = new HalloWelt();
this.hallowelt.handleSageHallo(); 
es kommt aber nur ein undefiened zurück???
Warum rufst du auch die Funktion/Methode auf die für die erfolgreiche Ergebnisverarbeitung zuständig ist?

Du musst sageHallo() aufrufen.

PHP-Code:
function sageHallo() {
        var 
pc:PendingCall service.sageHallo();
        
pc.responder = new RelayResponder(this"handleSageHallo""handleRemotingError");
    } 

Dort wird dann der Service aufgerufen (service.sageHallo()) und für diesen "Call" die Ergebnisverarbeitungsfunktionen definiert.
handleSageHallo wird bei einem erfolgreichen Call aufgerufen und handleRemotingError bei einem Fehler.

Du solltest dir vllt. mal den Thread durchlesen:
[AMFPHP] tutorial für AS2.0

Dort erkläre ich in folgendem Beitrag
[AMFPHP] tutorial für AS2.0
die einzelnen Aufrufarten und Ergebnisverarbeitungsmöglichkeiten.

Vllt. hilft dir das.
messingfeld ist offline   Mit Zitat antworten
Alt 06-03-2006, 11:55   #12 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
wow, siehst du jetzt kommen die schludrigkeitsfehler!

Werde mir deine Threads durchlesen!

Habe es gleich geändert, und siehe da! ... wer hätte das erwartet?! ... Klappt ja!

Danke bis hierhin!

Also war das Problem nicht der Aufruf über die Klasse! Sondern meine Schludrigkeit!. Jetzt muss ich mein altest Script mal anschauen und den dortigen Fehler finden. Denn scheinbar muss ja einer drin sein, mit deinem Script bekomme ich ja ohne Probleme eine Verbindung hergestellt!

Du hattest vorhin etwas zu Fehlern im Script (MySql) geschrieben, hattest du da etwas entdeckt?

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Alt 07-03-2006, 11:12   #13 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Lightbulb

@messingfeld & @mo

Habe Dank eurer Hilfe endlich alles relativ gut verstanden und nun auch hinbekommen! Nochmals Danke!

Jetzt muss ich nur noch das Kauderweltsch mit den Umlauten hinbekommen. Dann wäre ich ein großes Stück weiter.

Werde mal wieder die Suchfunktion benutzen.

Wenn einem von Euch dazu akut etwas einfallen sollte, könnt Ihr es ja trotzdem mal posten.

Mfg
crashT
crashT ist offline   Mit Zitat antworten
Alt 07-03-2006, 15:40   #14 (permalink)
Neuer User
 
Registriert seit: Apr 2005
Beiträge: 47
Ich glaube fast ich brauche noch einmal Deine(Eure) Hilfe. Mit den Umlauten komme ich nicht klar.

Habe schon zwei drei Dinge ausprobiert.
PHP-Code:
newsBack [i] =
            { 
                
titel:rsr.getItemAt(i).content_title,  
                
inhalt:rsr.getItemAt(i).content_text
            
};
//
newsBack[i].inhalt.replace(newsBack[i].inhalt"&uuml;""ü"); //geht nicht
newsBack[i].inhalt.split("&uuml;").join("ü"); //geht auch nicht 
und dann noch in der Service PHP:
PHP-Code:
$sql sprintf("SELECT `content_status` , `languages_id` , `group_ids` , `content_title` , `content_text` FROM `content_manager` WHERE `content_group` = $zahl ORDER BY `content_id`");
        
$query mysql_query($sql);
        
$query utf8_encode($query); //geht gleich garnicht!
        
return $query
Beim letzten ist es eigentlich ziemlich klar!

Nun stehe ich wieder an. Und die Bsp. im Forum beziehen sich alle auf diese drei Möglichkeiten.
crashT ist offline   Mit Zitat antworten
Alt 07-03-2006, 15:59   #15 (permalink)
mo#
interface.group
 
Registriert seit: Jan 2006
Beiträge: 37
PHP-Code:
$query mysql_query($sql); 
$query utf8_encode($query
Vermutlich ist utf8_encode nicht auf den Datentyp "resource" anwendbar.
uft8_encode ist halt für Strings gedacht.

Ich denke Du müsstest die einzelnen Felder (die die Codierung benötigen)
des Datensatzes beim Output kodieren (in PHP).

Habe grade nachgeschaut, ich mache die Codierung beim Erstellen/Updaten
der Datensätze, um mir das beim Auslesen zu sparen und direkt über
Remoting die MySQL-Queries zurückzuschicken.


mo#

Geändert von mo# (07-03-2006 um 16:09 Uhr)
mo# 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 03:18 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele