Pregunta

Estoy usando AMFPHP 1.9, ActionScript 3 y Flash Pro CS5 con flash player 10x. Yo estaba tratando de obtener datos llamando AMFPHP serices. Estoy corriendo la aplicación desde el IDE de Flash.

Para los tipos primitivos como cadena o un entero de que funciona bien. Pero cuando se trata de conseguir un objeto personalizado que muestra el siguiente error:

SecurityError: Error # 2000:. No hay contexto de seguridad activa

Y el parámetro de la función de control de resultados contiene nula. ¿Me he perdido algo aquí? Por favor, ayuda.

Los siguientes son mis clases:

ServiceContext.as

import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.events.NetStatusEvent;

internal class ServiceContext
{
    protected var myService:NetConnection;

    public function ServiceContext():void
    {
        myService = new NetConnection();
        myService.objectEncoding = ObjectEncoding.AMF3;
        myService.connect("http://localhost/MyApp/amfphp/gateway.php");
        myService.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
    }

    private function onNetStatus(event:NetStatusEvent):void
    {
        trace(event.info);            
    }
}

SceneService.as

import com.ddr.cv.model.Scene;
import flash.net.Responder;    

public class SceneService extends ServiceContext
{
    public function SceneService():void
    {
        com.ddr.cv.model.Scene.register();
    }

    public function getSceneByID(sceneID:uint, resultHandler:Function, faultHandler:Function)
    {
        var responder = new Responder(resultHandler, faultHandler);
        myService.call("com.ddr.cv.model.Scene.getSceneByID", responder, sceneID);
    }

    public function saveScene(scene:Scene, resultHandler:Function, faultHandler:Function)
    {
        var responder = new Responder(resultHandler, faultHandler);
        myService.call("Scene.saveScene", responder, scene);
    }
}

Scene.as

    import flash.display.MovieClip;
    import flash.net.registerClassAlias;

    [RemoteClass(alias="com.ddr.cv.model.Scene")]
    [Bindable]
    public class Scene extends MovieClip
    {

        private var _id:uint;
        public function get id():uint
        {
            return _id;
        }

        private var _sceneName:String;
        public function get sceneName():String
        {
            return _sceneName;
        }

        private var _imageName:String;
        public function get imageName():String
        {
            return _imageName;
        }

        private var _sceneCategoryID:int;
        public function get sceneCategoryID():int
        {
            return _sceneCategoryID;
        }

        private var _userID:String;
        public function get userID():String
        {
            return _userID;
        }

        private var _creationDate:Date;
        public function get creationDate():Date
        {
            return _creationDate;
        }

        public function Scene(id:uint = 0, sceneName:String = null, imageName:String = null, sceneCategoryID:int = 0, userID:String = null, creationDate:Date = null):void
        {
            _id = id;
            _sceneName = sceneName;
            _imageName = imageName;
            _sceneCategoryID = sceneCategoryID;
            _userID = userID;
            _creationDate = creationDate;
        }

        public static function register():void
        {
            registerClassAlias("com.ddr.cv.model.Scene", com.ddr.cv.model.Scene) ;
        }
}

Y aquí está Scene.php

    <?php
class Scene {

    var $id;
    var $sceneName;
    var $imageName;
    var $sceneCategoryID;
    var $userID;
    var $creationDate;

    // explicit actionscript package
    var $_explicitType = "com.ddr.cv.model.Scene";

    function Scene($id = 0, $sceneName = null, $imageName = null, $sceneCategoryID = 0, $userID = null, $creationDate = null)
    {
        $this->id = $id;
        $this->sceneName = $sceneName;
        $this->imageName = $imageName;
        $this->sceneCategoryID = $sceneCategoryID;
        $this->userID = $userID;
        $this->creationDate = $creationDate;
    }

    function getSceneByID($id){
        //creating dummy Scene object
        $scene = new Scene(1, "Test Scene", "test_scene.jpg", 6, null, null);
        return $scene;
    }

    function saveScene($scene)
    {
        //To Do:
    }
}
?>

Así es como yo llamo el servicio:

var sceneService:SceneService = new SceneService();
sceneService.getSceneByID(1, getSceneByID_resultHandler, getSceneByID_faultHandler);

Manipuladores:

    public function getSceneByID_resultHandler(scene:com.ddr.cv.model.Scene):void
    {
        //scene contains null here.
        //Shouldn't it contain the dummy Scene object from amfphp service method?
        trace("Success: " + scene);
    }

    public function getSceneByID_faultHandler(fault:Object):void
    {
        trace(">>> fault:" + fault.description);
    }
¿Fue útil?

Solución 2

@daidai: Gracias mucho que respondieron. Pensé que este post sería residirán para siempre en el interior de la base de datos SOF sin respuesta / no respondió y nunca ver la luz. Y luego, después de 10 días largos, usted respondió :) Me subí su respuesta porque te importaba para responder. Gracias una vez más.

Lo he comprobado desde el navegador también. Mismo resultado.

Pero finalmente descubrió por qué no estaba funcionando varios días atrás. El problema es que, por alguna extraña razón (o de seguridad), las clases de AS3 a medida que heredan de clip de película (y supongo que para todas las clases del sistema) no se puede asignar a sus homólogos de PHP, en mi caso, de la clase Scene.php. Pero la clase AS3 se puede enviar a la clase de servicio PHP y se asignó correctamente. Tenía que traer algunos cambios a mi arquitectura para abordar esta cuestión y resuelto mi problema. Pero este problema realmente me puso en el borde y me mantuvo este puesto bajo vigilancia por hora para los días con la esperanza de alguna respuesta.

De todos modos, sólo probado en flash player versión 10.1.82.76. No sé si funciona en las versiones anteriores ya que no hice la prueba en ellos.

Otros consejos

Pruebe a ejecutar desde un navegador, encontré AMFPHP / flash divertido actuar dentro del IDE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top