Bug in PyAMF, or Flash 10?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug in PyAMF, or Flash 10?

Alex Parenteau

Hi,

 

I have been chasing an annoying bug. I’m using a fairly recent SVN build of pyamf, and flash 10 player (from Flex SDK 3.4 I think).

 

My python/django code does return a dictionary:

 

def foo(request)

   return {“xml”: content}

 

“content” is a UTF-8 string.

 

I attached the serialized response from pyAMF, as an attachment. In case the mailing list blocks it, here is a screenshot for the serialized HTTP response body (as taken from DjangoGateway.__call__”buf” ):

 

 

The problem is that the NetConnection on Flex’s side will turn this into a ‘undefined’ object.

 

What is strange about it, is the fact that:

 

1-      Dictionaries with smaller strings will successfully be deserialized in flex

2-      If I manually use a FileStream decoding, starting at offset 30, using AMF3 as the decoding, it will work (in AIR).

 

Please help, I’m completely lost!

 

Thanks,

Alex

 


_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users

amf3_problem.bin (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Bug in PyAMF, or Flash 10?

Jesse Warden-2
Don't know why, but do know drama around UTF8.  Until one of the brainiacs answer, have you tried utilizing a ByteArray server-side instead, writing the string to it, throwing it down the wire, and in Flex going:

var string:String = bytes.readUTFBytes();

???

On Wed, Mar 17, 2010 at 2:54 PM, Alex Parenteau <[hidden email]> wrote:

Hi,

 

I have been chasing an annoying bug. I’m using a fairly recent SVN build of pyamf, and flash 10 player (from Flex SDK 3.4 I think).

 

My python/django code does return a dictionary:

 

def foo(request)

   return {“xml”: content}

 

“content” is a UTF-8 string.

 

I attached the serialized response from pyAMF, as an attachment. In case the mailing list blocks it, here is a screenshot for the serialized HTTP response body (as taken from DjangoGateway.__call__”buf” ):

 

 

The problem is that the NetConnection on Flex’s side will turn this into a ‘undefined’ object.

 

What is strange about it, is the fact that:

 

1-      Dictionaries with smaller strings will successfully be deserialized in flex

2-      If I manually use a FileStream decoding, starting at offset 30, using AMF3 as the decoding, it will work (in AIR).

 

Please help, I’m completely lost!

 

Thanks,

Alex

 


_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Bug in PyAMF, or Flash 10?

Nick Joyce
In reply to this post by Alex Parenteau
On 17 Mar 2010, at 21:54, Alex Parenteau wrote:

Hi,
 
I have been chasing an annoying bug. I’m using a fairly recent SVN build of pyamf, and flash 10 player (from Flex SDK 3.4 I think).

Which revision are you using? Have you tried trunk (r3285) or the last release (0.5.1)? We try to keep trunk as stable as possible, but some things may slip through the net.

 
My python/django code does return a dictionary:
 
def foo(request)
   return {“xml”: content}
 
“content” is a UTF-8 string.
 
I attached the serialized response from pyAMF, as an attachment. In case the mailing list blocks it, here is a screenshot for the serialized HTTP response body (as taken from DjangoGateway.__call__”buf” ):
 
<image001.png>

Fortunately the binary attachment was not scrubbed. This is what current trunk decodes the request to be:

<Envelope amfVersion=3>
 (u'/1', <Response status=/onResult>{'xml': u'<faces><pict>\n      <width>450</width>\n      <height>600</height>\n      <time>370.000000000000</time>\n      <uid>47245BA4-1BEC-4c41-8757-8BC13AC55D13</uid>\n    </pict>\n    <face>\n      <x>149</x>\n      <y>191</y>\n      <width>199</width>\n      <height>199</height>\n      <angle>0.000000000000</angle>\n      <response>1.009177923203</response>\n      <classifier_id>0</classifier_id>\n      <faceID>0</faceID>\n      <frameno>-1</frameno>\n      <tick>-1</tick>\n      <clothes>1</clothes>\n      <fir>1</fir>\n    <source>http://localhost:8181/crop/85/149/191/199/199/0/</source><imageid>85</imageid><xleye>0.486561838786</xleye><yleye>0.497527694702</yleye><rleye>1.55789148808</rleye><xreye>0.618110351563</xreye><yreye>0.49264251709</yreye><rreye>1.49939620495</rreye></face>\n  </faces>', 'status': u'OK', 'id': 85, 'wait': 0}</Response>)
</Envelope>

I notice that there are a number of other keys in the response, namely 'status', 'id' and 'wait'. The image of the dump does not seem to match up to this.

 
The problem is that the NetConnection on Flex’s side will turn this into a ‘undefined’ object.
 
What is strange about it, is the fact that:
 
1-      Dictionaries with smaller strings will successfully be deserialized in flex
2-      If I manually use a FileStream decoding, starting at offset 30, using AMF3 as the decoding, it will work (in AIR).
 
Please help, I’m completely lost!

Can you provide a simple stripped down working example of this behaviour (swf and python app)? I would love to get to the bottom of this, and that will be the quickest way.

 
Thanks,
Alex
 

No, thank you! :)

Nick

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Bug in PyAMF, or Flash 10?

Alex Parenteau
In reply to this post by Alex Parenteau
Hi Nick and Jessee,

Thanks for the pointers. I thought of working around the bug, but I'm still interested to find the real reason behind it.

I tried to isolate it, and it turns out I seems to work when outside my flash code (writing a simple air app).

I verified both envelops are exactly the same in the HTTP body, in both cases.

So I'm now strongly suspecting a problem in the flash app (or django?!?!). Unfortunately I'm not a flash "guy" (meaning I'm not working on flash runtime), so it will take me some time to find out what is going on.

I'll keep you posted if I find new info, and in the meantime I will upgrade both Flex SDK (3.4 to 3.5) and PyAMF to 5.1 and see if that changes a thing (I have other ideas too, but it will take more time).

BTW right now I'm working around those problems by turning off AMF3 all together (using AMF0 only), but I'm not happy with this, for obvious reasons.


I notice that there are a number of other keys in the response, namely 'sta=
tus', 'id' and 'wait'. The image of the dump does not seem to match up to t=
his.

Yes sorry for the confusion, but I ruled that out (I tried with and without each parameter).


Can you provide a simple stripped down working example of this behaviour (s=
wf and python app)? I would love to get to the bottom of this, and that wil=
l be the quickest way.

This is below (I don't know if that's in the form you expected though): however it *did* work when I tried to isolate it, so I'm still chasing the problem elsewhere.

Thanks much for pyamf!

alex

<<<<<<<<<<<<< CUT url.py <<<<<<<<<<<<<<<<
urlpatterns = patterns('',
    (r'^.*/?generalrpc/$''djangoserver.generalserver.views.rpc'),
)
 <<<<<<<<<<<<< CUT url.py <<<<<<<<<<<<<<<<
 
<<<<<<<<<<<<< CUT generalserver/views.py <<<<<<<<<<<<<<<<
import djangoserver.settings as settings
from pyamf.remoting.gateway.django import DjangoGateway
import xml.etree.cElementTree as ET
 
# django/pyamf
class GeneralService:
     
      def pyamftest(self, request):
            if 1:
                  import marshal               
                  res = marshal.load(file("J:<a href="smb://pyobj_problem.bin" style="color: blue; text-decoration: underline; ">\\pyobj_problem.bin""rb"))
                  return res
             rootnode = ET.Element("root")
            for i in range(0,100):
                  subnode = ET.SubElement(rootnode, "node", name="foo%d" % i)
            xml = ET.tostring(rootnode, encoding="utf-8")
            return {"xml" : xml}
 
services = {
      'generalservice': GeneralService()
}
 
rpc = DjangoGateway(services, debug=settings.DEBUG, logger=logger)
<<<<<<<<<<<<< CUT generalserver/views.py <<<<<<<<<<<<<<<<
 
 
<<<<<<<<<<<<<<<< CUT pyamftest.mxml <<<<<<<<<<<<<<<<<<<<<<<<
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="onAppComplete()">
 
<mx:Script>
      <![CDATA[
            import flash.events.IOErrorEvent;
            import flash.events.NetStatusEvent;
            import flash.events.SecurityErrorEvent;
            import flash.events.AsyncErrorEvent;
            import flash.net.NetConnection;
            import flash.net.Responder;
 
            import mx.controls.Alert;
 
            private function onAppComplete():void {
                  test();
            }
 
            private function test():void {
                  iTestBtn.enabled = false;
                  var c:NetConnection = new NetConnection();
                 
            c.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );
            c.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
            c.addEventListener( SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler );
            c.addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
            
            var r:Responder = new Responder( function(result :*):void {
                        trace(result);
                       
                        try {
                              iText.text = result.xml;
                        } catch(e:Error) {
                              iText.text = result.toString();
                        }
                              iTestBtn.enabled = true;
                        }, function(error : *) : void {
                              onRPCFault(error);
                        } );
                 
                  c.connect("http://localhost:8181/generalrpc/");
                 
                  c.call("generalservice.pyamftest", r);
            }
 
        private function securityErrorHandler(event:SecurityErrorEvent):void {
            onRPCFault(event.text);
        }
 
        private function asyncErrorHandler(event:AsyncErrorEvent):void {
            onRPCFault(event.error);
        }
 
            private function netStatusHandler( event:NetStatusEvent ):void
            {
                  if ( event.info.level == "error" )
                        onRPCFault(event.info);
            }
           
            private function ioErrorHandler( error:IOErrorEvent ):void
            {
            onRPCFault(error);
            }
 
            private function onRPCFault(error : *) : void {
                  var errorMsg:String = new String();
            for ( var d:String in error ) {
               errorMsg += error[d] + '\n';
            }
                  Alert.show(errorMsg, "RPC Error");
                  iTestBtn.enabled = true;
            }
      ]]>
</mx:Script>
      <mx:Button id="iTestBtn" x="10" y="302" label="Test" enabled="false" click="test()"/>
      <mx:TextArea id="iText" right="10" left="10" height="284" top="10"/>
     
</mx:WindowedApplication>
<<<<<<<<<<<<<<<< CUT pyamftest.mxml <<<<<<<<<<<<<<<<<<<<<<<<
 





----------------------------------------------------------------------

Message: 1
Date: Wed, 17 Mar 2010 23:19:06 +0000
From: Nick Joyce <[hidden email]>
Subject: Re: [pyamf-users] Bug in PyAMF, or Flash 10?
To: PyAMF general discussion <[hidden email]>
Message-ID: <[hidden email]>
Content-Type: text/plain; charset="windows-1252"

On 17 Mar 2010, at 21:54, Alex Parenteau wrote:

Hi,
=

I have been chasing an annoying bug. I=92m using a fairly recent SVN buil=
d of pyamf, and flash 10 player (from Flex SDK 3.4 I think).

Which revision are you using? Have you tried trunk (r3285) or the last rele=
ase (0.5.1)? We try to keep trunk as stable as possible, but some things ma=
y slip through the net.

=

My python/django code does return a dictionary:
=

def foo(request)
  return {=93xml=94: content}
=

=93content=94 is a UTF-8 string.
=

I attached the serialized response from pyAMF, as an attachment. In case =
the mailing list blocks it, here is a screenshot for the serialized HTTP re=
sponse body (as taken from DjangoGateway.__call__=94buf=94 ):
=

<image001.png>

Fortunately the binary attachment was not scrubbed. This is what current tr=
unk decodes the request to be:

<Envelope amfVersion=3D3>
(u'/1', <Response status=3D/onResult>{'xml': u'<faces><pict>\n      <width=
450</width>\n      <height>600</height>\n      <time>370.000000000000</tim=
e>\n      <uid>47245BA4-1BEC-4c41-8757-8BC13AC55D13</uid>\n    </pict>\n   =
<face>\n      <x>149</x>\n      <y>191</y>\n      <width>199</width>\n    =
 <height>199</height>\n      <angle>0.000000000000</angle>\n      <respons=
e>1.009177923203</response>\n      <classifier_id>0</classifier_id>\n      =
<faceID>0</faceID>\n      <frameno>-1</frameno>\n      <tick>-1</tick>\n   =
  <clothes>1</clothes>\n      <fir>1</fir>\n    <source>http://localhost:8=
181/crop/85/149/191/199/199/0/</source><imageid>85</imageid><xleye>0.486561=
838786</xleye><yleye>0.497527694702</yleye><rleye>1.55789148808</rleye><xre=
ye>0.618110351563</xreye><yreye>0.49264251709</yreye><rreye>1.49939620495</=
rreye></face>\n  </faces>', 'status': u'OK', 'id': 85, 'wait': 0}</Response=
)
</Envelope>

I notice that there are a number of other keys in the response, namely 'sta=
tus', 'id' and 'wait'. The image of the dump does not seem to match up to t=
his.

=

The problem is that the NetConnection on Flex=92s side will turn this int=
o a =91undefined=92 object.
=

What is strange about it, is the fact that:
=

1-      Dictionaries with smaller strings will successfully be deserializ=
ed in flex
2-      If I manually use a FileStream decoding, starting at offset 30, u=
sing AMF3 as the decoding, it will work (in AIR).
=

Please help, I=92m completely lost!

Can you provide a simple stripped down working example of this behaviour (s=
wf and python app)? I would love to get to the bottom of this, and that wil=
l be the quickest way.

=

Thanks,
Alex
=


No, thank you! :)

Nick


_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Bug in PyAMF, or Flash 10?

Alex Parenteau
Hi,

I wanted to give the half-conclusion of this problem I reported earlier, and mention it is probably not a problem with PyAMF, but instead something with my flash code.

It turns out there was a piece of code to work around another unrelated problem with flash, and this seemed to jam (corrupt?) the connection.

It put the code below, look at the if(0) if interested.

I was trying in this class below to force re-connect for each rpc call, because it was producing some rare errors if I did not. Due to my lack of experience with flash, it is still very fuzzy to me how the NetConnection is working, and what happens exactly when connecting or closing the connection.

Thanks for the help,

Regards,
alex


        public class AirfaceConnection extends NetConnection
        {
                public function AirfaceConnection(fault:Function)
                {
                        super();
                        
                        onRPCFault = fault;
                        communicate = 0;

            addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );
            addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
            addEventListener( SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler );
            addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
                }
        
                public function rpccall(command:String, resultCB:Function, errorCB:Function, ... arguments:Array):void {
                        communicate++;
if(0) {
// this work around is somehow disrupting PyAMF
                        close();
                        super.connect(url);
}
                        var r:Responder = new Responder( function(result :*):void {
                                        communicate--;
                                        resultCB(result);
                                }, function onRPCFault(error : *) : void {
                                        communicate--;
                                        errorCB(error);
                                } );
                        var morearguments:Array = [command, r];
                        morearguments = morearguments.concat(arguments)
                        super.call.apply(null, morearguments);
                }
                
                [Bindable]
                public var communicate:int;
        
                private var onRPCFault:Function;
                
                private var url:String;

                override public function connect(command:String, ... arguments:Array):void {
                        url = command;
                        super.connect(url);
                }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
            onRPCFault(event.text);
        }
        private function asyncErrorHandler(event:AsyncErrorEvent):void {
            onRPCFault(event.error);
        }

                private function netStatusHandler( event:NetStatusEvent ):void
                {
                        if ( event.info.level == "error" )
                                onRPCFault(event.info);
                }
                
                private function ioErrorHandler( error:IOErrorEvent ):void
                {
             onRPCFault(error);
                }
        }



On Mar 19, 2010, at 1:51 AM, Alex Parenteau wrote:

Hi Nick and Jessee,

Thanks for the pointers. I thought of working around the bug, but I'm still interested to find the real reason behind it.

I tried to isolate it, and it turns out I seems to work when outside my flash code (writing a simple air app).

I verified both envelops are exactly the same in the HTTP body, in both cases.

So I'm now strongly suspecting a problem in the flash app (or django?!?!). Unfortunately I'm not a flash "guy" (meaning I'm not working on flash runtime), so it will take me some time to find out what is going on.

I'll keep you posted if I find new info, and in the meantime I will upgrade both Flex SDK (3.4 to 3.5) and PyAMF to 5.1 and see if that changes a thing (I have other ideas too, but it will take more time).

BTW right now I'm working around those problems by turning off AMF3 all together (using AMF0 only), but I'm not happy with this, for obvious reasons.


I notice that there are a number of other keys in the response, namely 'sta=
tus', 'id' and 'wait'. The image of the dump does not seem to match up to t=
his.

Yes sorry for the confusion, but I ruled that out (I tried with and without each parameter).


Can you provide a simple stripped down working example of this behaviour (s=
wf and python app)? I would love to get to the bottom of this, and that wil=
l be the quickest way.

This is below (I don't know if that's in the form you expected though): however it *did* work when I tried to isolate it, so I'm still chasing the problem elsewhere.

Thanks much for pyamf!

alex

<<<<<<<<<<<<< CUT url.py <<<<<<<<<<<<<<<<
urlpatterns = patterns('',
    (r'^.*/?generalrpc/$''djangoserver.generalserver.views.rpc'),
)
 <<<<<<<<<<<<< CUT url.py <<<<<<<<<<<<<<<<
 
<<<<<<<<<<<<< CUT generalserver/views.py <<<<<<<<<<<<<<<<
import djangoserver.settings as settings
from pyamf.remoting.gateway.django import DjangoGateway
import xml.etree.cElementTree as ET
 
# django/pyamf
class GeneralService:
     
      def pyamftest(self, request):
            if 1:
                  import marshal               
                  res = marshal.load(file("J:<a href="smb://pyobj_problem.bin" style="color: blue; text-decoration: underline; ">\\pyobj_problem.bin""rb"))
                  return res
             rootnode = ET.Element("root")
            for i in range(0,100):
                  subnode = ET.SubElement(rootnode, "node", name="foo%d" % i)
            xml = ET.tostring(rootnode, encoding="utf-8")
            return {"xml" : xml}
 
services = {
      'generalservice': GeneralService()
}
 
rpc = DjangoGateway(services, debug=settings.DEBUG, logger=logger)
<<<<<<<<<<<<< CUT generalserver/views.py <<<<<<<<<<<<<<<<
 
 
<<<<<<<<<<<<<<<< CUT pyamftest.mxml <<<<<<<<<<<<<<<<<<<<<<<<
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="onAppComplete()">
 
<mx:Script>
      <![CDATA[
            import flash.events.IOErrorEvent;
            import flash.events.NetStatusEvent;
            import flash.events.SecurityErrorEvent;
            import flash.events.AsyncErrorEvent;
            import flash.net.NetConnection;
            import flash.net.Responder;
 
            import mx.controls.Alert;
 
            private function onAppComplete():void {
                  test();
            }
 
            private function test():void {
                  iTestBtn.enabled = false;
                  var c:NetConnection = new NetConnection();
                 
            c.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );
            c.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
            c.addEventListener( SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler );
            c.addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
            
            var r:Responder = new Responder( function(result :*):void {
                        trace(result);
                       
                        try {
                              iText.text = result.xml;
                        } catch(e:Error) {
                              iText.text = result.toString();
                        }
                              iTestBtn.enabled = true;
                        }, function(error : *) : void {
                              onRPCFault(error);
                        } );
                 
                  c.connect("http://localhost:8181/generalrpc/");
                 
                  c.call("generalservice.pyamftest", r);
            }
 
        private function securityErrorHandler(event:SecurityErrorEvent):void {
            onRPCFault(event.text);
        }
 
        private function asyncErrorHandler(event:AsyncErrorEvent):void {
            onRPCFault(event.error);
        }
 
            private function netStatusHandler( event:NetStatusEvent ):void
            {
                  if ( event.info.level == "error" )
                        onRPCFault(event.info);
            }
           
            private function ioErrorHandler( error:IOErrorEvent ):void
            {
            onRPCFault(error);
            }
 
            private function onRPCFault(error : *) : void {
                  var errorMsg:String = new String();
            for ( var d:String in error ) {
               errorMsg += error[d] + '\n';
            }
                  Alert.show(errorMsg, "RPC Error");
                  iTestBtn.enabled = true;
            }
      ]]>
</mx:Script>
      <mx:Button id="iTestBtn" x="10" y="302" label="Test" enabled="false" click="test()"/>
      <mx:TextArea id="iText" right="10" left="10" height="284" top="10"/>
     
</mx:WindowedApplication>
<<<<<<<<<<<<<<<< CUT pyamftest.mxml <<<<<<<<<<<<<<<<<<<<<<<<
 





----------------------------------------------------------------------

Message: 1
Date: Wed, 17 Mar 2010 23:19:06 +0000
From: Nick Joyce <[hidden email]>
Subject: Re: [pyamf-users] Bug in PyAMF, or Flash 10?
To: PyAMF general discussion <[hidden email]>
Message-ID: <[hidden email]>
Content-Type: text/plain; charset="windows-1252"

On 17 Mar 2010, at 21:54, Alex Parenteau wrote:

Hi,
=

I have been chasing an annoying bug. I=92m using a fairly recent SVN buil=
d of pyamf, and flash 10 player (from Flex SDK 3.4 I think).

Which revision are you using? Have you tried trunk (r3285) or the last rele=
ase (0.5.1)? We try to keep trunk as stable as possible, but some things ma=
y slip through the net.

=

My python/django code does return a dictionary:
=

def foo(request)
  return {=93xml=94: content}
=

=93content=94 is a UTF-8 string.
=

I attached the serialized response from pyAMF, as an attachment. In case =
the mailing list blocks it, here is a screenshot for the serialized HTTP re=
sponse body (as taken from DjangoGateway.__call__=94buf=94 ):
=

<image001.png>

Fortunately the binary attachment was not scrubbed. This is what current tr=
unk decodes the request to be:

<Envelope amfVersion=3D3>
(u'/1', <Response status=3D/onResult>{'xml': u'<faces><pict>\n      <width=
450</width>\n      <height>600</height>\n      <time>370.000000000000</tim=
e>\n      <uid>47245BA4-1BEC-4c41-8757-8BC13AC55D13</uid>\n    </pict>\n   =
<face>\n      <x>149</x>\n      <y>191</y>\n      <width>199</width>\n    =
 <height>199</height>\n      <angle>0.000000000000</angle>\n      <respons=
e>1.009177923203</response>\n      <classifier_id>0</classifier_id>\n      =
<faceID>0</faceID>\n      <frameno>-1</frameno>\n      <tick>-1</tick>\n   =
  <clothes>1</clothes>\n      <fir>1</fir>\n    <source>http://localhost:8=
181/crop/85/149/191/199/199/0/</source><imageid>85</imageid><xleye>0.486561=
838786</xleye><yleye>0.497527694702</yleye><rleye>1.55789148808</rleye><xre=
ye>0.618110351563</xreye><yreye>0.49264251709</yreye><rreye>1.49939620495</=
rreye></face>\n  </faces>', 'status': u'OK', 'id': 85, 'wait': 0}</Response=
)
</Envelope>

I notice that there are a number of other keys in the response, namely 'sta=
tus', 'id' and 'wait'. The image of the dump does not seem to match up to t=
his.

=

The problem is that the NetConnection on Flex=92s side will turn this int=
o a =91undefined=92 object.
=

What is strange about it, is the fact that:
=

1-      Dictionaries with smaller strings will successfully be deserializ=
ed in flex
2-      If I manually use a FileStream decoding, starting at offset 30, u=
sing AMF3 as the decoding, it will work (in AIR).
=

Please help, I=92m completely lost!

Can you provide a simple stripped down working example of this behaviour (s=
wf and python app)? I would love to get to the bottom of this, and that wil=
l be the quickest way.

=

Thanks,
Alex
=


No, thank you! :)

Nick



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users