2012-02-23 54 views
0

我试图在单个ActionScript方法上调用AMFPHP两次,发生的情况是只有第一次调用成功。第二个不会返回错误,不会提醒任何事情,更有可能它甚至不会发生,我不知道为什么。在netconnection上使用singleton模式对amfphp进行多次调用

下面是一个例子:

public function editSomething():void{ 
    if(dgChild.selectedIndex == -1){ 
     Alert.show("You need to select a register in order to edit it."); 
     return; 
    } 
    _parent1.getParentByChild(dgChild.selectedItem.id); 
    _parent2.getParent2ByChild(dgChild.selectedItem.id); 
} 

当调用此方法时,第一亲本通常被称为,但第二个是没有的。

变量_parent1和_parent2是对象与PHP通信,并保存结果:

public class parentDAO{ 
    //Service or Class that this objectDAO will be communicating with. 
    private const _phpController:String = "parentController/"; 
    private var _AMFPHP:AMFPHP = AMFPHP.getInstance(); 

    //ArrayCollection that will be filled with data comming from PHP/Database.   
    [Bindable] private var _dataProviderAeronave:ArrayCollection; 
    //I use public getter and setter for this dataProvider 

    public function getParentByChild(child_id:int):void{ 
      _AMFPHP.GATEWAY.call(_phpController + "getParentByChild", new Responder(resultGetParent), child_id); 
    } 

    private function resultGetParent(result:Array):void{ 
      dataProviderParent = new ArrayCollection(result); 
    } 
} 

现在,假定可变_parent1以上声明一个对象和所述_parent2是另一个类的另一个目的非常非常类似于这一个,并假设这两个通信完美无缺,现在的问题就出现了:当我在一个单一的ActionScript方法中调用这两个方法时。如果我打电话给他们其中的一个,它将正常工作,但是当我打电话给两个服务时,第二个服务从来没有被实际调用过。我很确定,因为我可以通过Service Capture Proxy查看它。

任何想法?

+0

_parent1和_parent2是从AMFPHP不同的服务。不同的类,不同的表等 – 2012-02-23 16:18:37

回答

1

会发生什么情况是,每当NetConnection类调用AMFPHP时,它都会自动关闭与该路径的连接。所以,基本上下一个调用会被忽略,我不知道为什么它不会显示在Flash Debugger中。 我的解决方案是始终检查网关是否通过NetConnection类中的“连接”[只读]属性进行连接。如果它是错误的,我强制一个新的连接和voalá,脚本工作得很好。

0

任何想法如何解决这个类?我有或多或少像你一样的问题,你试图沟通时,amfphp已经很忙,但我广泛使用这个类。 基本上是什么做的是调用ChannelPicker.getInstance()。getNewRemoteObject()

package communication 
{ 
    import flash.net.NetConnection; 

    import mx.core.FlexGlobals; 
    import mx.managers.BrowserManager; 
    import mx.managers.IBrowserManager; 
    import mx.messaging.ChannelSet; 
    import mx.messaging.channels.AMFChannel; 
    import mx.rpc.remoting.RemoteObject; 

    import spark.components.Label; 

    public class ChannelPicker 
    { 
     private static var instance:ChannelPicker; 
     protected var channelSet:ChannelSet= new ChannelSet(); 
     protected var url:String; 

     static public function getInstance():ChannelPicker{ 
      if(instance == null){ 
       instance = new ChannelPicker(); 
      } 
      return instance; 
     } 

     public function ChannelPicker() 
     { 
      do 
      { 
       var browser:IBrowserManager = BrowserManager.getInstance(); 
       browser.init("",""); 
       url = browser.url; 
      }while (url == null || url==""); 
         /*oracle_plajva is project name which ends up being html name of my file so to get current url i need to split it */ 
      url = url.split(/oracle_plajva.html/)[0] + "Amfphp/index.php"; 
      var chanel:AMFChannel = new AMFChannel("amfphp", url); 
      this.channelSet = new ChannelSet(); 
      this.channelSet.addChannel(chanel); 
     } 

     public function getChannelSet():ChannelSet{ 
      return channelSet; 
     } 

     public function getNewRemoteObject():RemoteObject{ 
      var o:RemoteObject = new RemoteObject(); 
      o.destination = "amfphp"; 
      o.channelSet = channelSet; 
      return o; 
     } 

     public function getUrl():String{ 
      return url; 
     } 
    } 
} 
+0

我不太确定RemoteObject是如何工作的,也不是我有过使用它的经验,但似乎你每次调用getNewremoteObject()时都会将新对象与AMFPHP连接起来。我的Singleton类的目的是缩小我在应用程序中构建的NetConnection对象的数量。你似乎只是试图集中你与AMFPHP连接的地方,对吧? – 2012-09-18 14:59:01

+0

是的,这是正确的。我可以刷新我的应用程序尽可能多,只要它是单个实例,但如果我有2个实例的Flash播放器和我的运行,并在同一时间调用amfphp服务发生一些奇怪的事情和我不知道如何调试它。 即使我使用2个应用程序和amfphp相同的副本,也会发生同样的情况。所以我想这是在flash浏览器端或amfphp端的一些奇怪的缓存。 无论如何这里是发生什么,你可以看到在图片中出现问题 http://tinypic.com/r/i4fei9/6 http://tinypic.com/r/mwcvuv/6 – 2012-09-18 17:10:38

+0

使用RemoteObject的任何特定原因?我可以通过NetConnection帮助您更多。 关于ScreenShot,我认为Row_number列来自使用ROW_NUMBER魔术变量的Oracle选择。我对Oracle并没有太多经验,但我确实记得,为了对结果进行分页,这是必需的。你是否从Flex或Apache日志(PHP)中收到任何错误消息? – 2012-09-18 17:17:42