Tried that, the situation remains the same: ticket (and HTTP 500 in
log) when accessing from the browser, no ticket (and HTTP 200 in log)
when calling from Flex.
But now I'm quite sure that the problem is either with my Flex code
(or services-config.xml) or with pyamf. I just wonder if web2py allows
to debug this stuff directy...
I searched for pyamf group to post my question there, found none. Am I
missing something?

On Mar 10, 12:17 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
> One more test. delete all tickets (errors/*) and see if a new tickets
> is generated by the flash request. It may contain some useful info.
>
> massimo
>
> On Mar 9, 3:39 pm, Igor Gassko <gas...@gmail.com> wrote:
>
>
>
> > I embedded it right into the library.zip of web2py by openning .egg
> > package and using its pyamf folder. I'm quite sure that pyamf is being
> > imported, because before I did this trick I was getting "no module
> > named pyamf" error. I also tried using the source version (by
> > appending it directly to app.path) with the same result.
> > The problem is that I don't know how to debug this scenario, the
> > browser shows error, apparently because the request lacks some stuff.
>
> > On Mar 9, 11:28 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > not sure but:
> > > 1) let's concentrate on the first method since that is the new way of
> > > handling this
> > > 2) you appear to be using the windows binary distribution of web2py.
> > > that does not come with pyamf and would not see it even if installed.
> > > Could that be the problem? Could you try using the source version. You
> > > would need to install pyamf separately.
>
> > > On Mar 9, 1:04 pm, iggass <gas...@gmail.com> wrote:
>
> > > > Hello!
>
> > > > I'm trying to deploy basic connectivity between Flex AS3 application
> > > > and web2py server-side. In order to achieve this noble cause I studied
> > > > the official tutorial (http://www.web2py.com/AlterEgo/default/show/22)
> > > > and the official documentation (http://web2py.com/book/default/section/
> > > > 9/2).
> > > > So, I created two controllers 'rpc' and 'rpc2' as follows:
>
> > > > rpc.py
> > > > ---------------
> > > > from gluon.tools import Service
> > > > service = Service(globals())
>
> > > > def call():
> > > >     session.forget()
> > > >     return service()
>
> > > > @service.amfrpc
> > > > def test():
> > > >     return "Test!!!"
>
> > > > rpc2.py
> > > > ---------------
> > > > import pyamf
> > > > import pyamf.remoting.gateway
>
> > > > def test():
> > > >     return "Test!!!"
>
> > > > services={'test.test':test}
>
> > > > def gateway():
> > > >     base_gateway = pyamf.remoting.gateway.BaseGateway(services)
> > > >     context = pyamf.get_context(pyamf.AMF0)
> > > >     pyamf_request = pyamf.remoting.decode(request.body.read(),
> > > > context)
> > > >     pyamf_response = pyamf.remoting.Envelope(pyamf_request.amfVersion,
> > > > pyamf_request.clientType)
> > > >     for name, message in pyamf_request:
> > > >         pyamf_response[name] = base_gateway.getProcessor(message)
> > > > (message)
> > > >     response.headers['Content-Type'] = pyamf.remoting.CONTENT_TYPE
> > > >     return pyamf.remoting.encode(pyamf_response, context).getvalue()
>
> > > > -------------
>
> > > > After that, I tried accessing exposed amf services using both
> > > > controllers respectively via browser through the following URLs:
>
> > > >http://127.0.0.1:8000/AppTryout/rpc/call/amfrpc/testhttp://127.0.0.1:...
>
> > > > In both cases I recieve similar errors:
>
> > > > forhttp://127.0.0.1:8000/AppTryout/rpc/call/amfrpc/test:
> > > > ---------------------------------------------------------------------------
> > > >  ------
> > > > Traceback (most recent call last):
> > > >   File "gluon/restricted.py", line 173, in restricted
> > > >   File "//server2003/web2py/applications/AppTryout/controllers/
> > > > rpc.py", line 13, in <module>
> > > >   File "gluon/globals.py", line 96, in <lambda>
> > > >   File "//server2003/web2py/applications/AppTryout/controllers/
> > > > rpc.py", line 7, in call
> > > >   File "gluon/tools.py", line 2942, in __call__
> > > >   File "gluon/tools.py", line 2885, in serve_amfrpc
> > > >   File "\\server2003\web2py\library.zip\pyamf\remoting\__init__.py",
> > > > line 634, in decode
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 322, in read_uchar
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 298, in _read
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 646, in read
> > > > IOError: Attempted to read 1 bytes from the buffer but only 0 remain
>
> > > > In file: \\server2003\web2py\applications\AppTryout/controllers/rpc.py
> > > > from gluon.tools import Service
> > > > service = Service(globals())
>
> > > > def call():
> > > >     session.forget()
> > > >     return service()
>
> > > > @service.amfrpc
> > > > def test():
> > > >     return "Test!!!"
>
> > > > response._vars=response._caller(call)
>
> > > > forhttp://127.0.0.1:8000/AppTryout/rpc/call/amfrpc/test:
> > > > ---------------------------------------------------------------------------
> > > >  ------
> > > > Traceback (most recent call last):
> > > >   File "gluon/restricted.py", line 173, in restricted
> > > >   File "//server2003/web2py/applications/AppTryout/controllers/
> > > > rpc2.py", line 18, in <module>
> > > >   File "gluon/globals.py", line 96, in <lambda>
> > > >   File "//server2003/web2py/applications/AppTryout/controllers/
> > > > rpc2.py", line 12, in gateway
> > > >   File "\\server2003\web2py\library.zip\pyamf\remoting\__init__.py",
> > > > line 634, in decode
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 322, in read_uchar
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 298, in _read
> > > >   File "\\server2003\web2py\library.zip\pyamf\util\__init__.py", line
> > > > 646, in read
> > > > IOError: Attempted to read 1 bytes from the buffer but only 0 remain
>
> > > > In file: \\server2003\web2py\applications\AppTryout/controllers/
> > > > rpc2.py
> > > > import pyamf
> > > > import pyamf.remoting.gateway
>
> > > > def test():
> > > >     return "Test!!!"
>
> > > > services={'test.test':test}
>
> > > > def gateway():
> > > >     base_gateway = pyamf.remoting.gateway.BaseGateway(services)
> > > >     context = pyamf.get_context(pyamf.AMF0)
> > > >     pyamf_request = pyamf.remoting.decode(request.body.read(),
> > > > context)
> > > >     pyamf_response = pyamf.remoting.Envelope(pyamf_request.amfVersion,
> > > > pyamf_request.clientType)
> > > >     for name, message in pyamf_request:
> > > >         pyamf_response[name] = base_gateway.getProcessor(message)
> > > > (message)
> > > >     response.headers['Content-Type'] = pyamf.remoting.CONTENT_TYPE
> > > >     return pyamf.remoting.encode(pyamf_response, context).getvalue()
> > > > response._vars=response._caller(gateway)
>
> > > > It can be seen that in both cases the error arrises in the statement:
> > > > response._vars=response._caller(...)
> > > > and involves exactly the same code in pyamf module.
>
> > > > In httpserver.log I get:
> > > > 127.0.0.1, 2010-03-09 20:49:52, GET, /AppTryout/rpc/call/amfrpc/test,
> > > > HTTP/1.1, 500, 4.131000
> > > > 127.0.0.1, 2010-03-09 20:50:24, GET, /AppTryout/rpc2/gateway/test,
> > > > HTTP/1.1, 500, 6.098000
>
> > > > ---------------------------------------------------------------------------
> > > >  --
>
> > > > My surmise is thay amfrpc won't work with browser, so I prepared
> > > > simple Flex application to consume these services:
>
> > > > <?xml version="1.0" encoding="utf-8"?>
> > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > > > layout="absolute">
> > > >         <mx:Script>
> > > >                 <![CDATA[
> > > >                         import mx.rpc.events.FaultEvent;
> > > >             import mx.rpc.events.ResultEvent;
> > > >             import mx.controls.Alert;
>
> > > >             private function resultHandler(event:ResultEvent):void
> > > >             {
> > > >                 trace(event.result.toString());
> > > >             }
>
> > > >             private function faultHandler(event:FaultEvent):void
> > > >             {
> > > >                 trace(event.fault.message);
> > > >             }
>
> > > >             private function fire():void
> > > >             {
> > > >                 amfService.test();
> > > >                 amfService2.test();
> > > >             }
> > > >                 ]]>
> > > >         </mx:Script>
>
> > > >     <mx:RemoteObject id="amfService" showBusyCursor="true"
> > > > destination="dest-amfrpc">
> > > >          <mx:method name="test" result="resultHandler(event)"
> > > > fault="faultHandler(event)"/>
> > > >     </mx:RemoteObject>
> > > >     <mx:RemoteObject id="amfService2" showBusyCursor="true"
> > > > destination="dest-amfrpc2">
> > > >          <mx:method name="test" result="resultHandler(event)"
> > > > fault="faultHandler(event)"/>
> > > >     </mx:RemoteObject>
> > > >     <mx:Button x="250" y="150" label="Fire" click="fire();"/>
> > > > </mx:Application>
>
> > > > ------------
>
> > > > Its corresponding services-config.xml looks as follows:
>
> > > > <?xml version="1.0" encoding="UTF-8"?>
> > > > <services-config>
> > > >   <services>
> > > >     <service id="amfrpc-flashremoting-service"
> > > >                  class="flex.messaging.services.RemotingService"
>
> > > > messageTypes="flex.messaging.messages.RemotingMessage">
> > > >             <destination id="dest-amfrpc">
> > > >                 <channels>
> > > >                     <channel ref="ch-amfrpc"/>
> > > >                 </channels>
> > > >                 <properties>
> > > >                     <source>*</source>
> > > >                 </properties>
> > > >             </destination>
> > > >             <destination id="dest-amfrpc2">
> > > >                 <channels>
> > > >                     <channel ref="ch-amfrpc2"/>
> > > >                 </channels>
> > > >                 <properties>
> > > >                     <source>*</source>
> > > >                 </properties>
> > > >             </destination>
> > > >         </service>
> > > >     </services>
>
> > > >     <channels>
> > > >         <channel-definition id="ch-amfrpc"
> > > > class="mx.messaging.channels.AMFChannel">
> > > >             <endpoint uri="http://127.0.0.1:8000/AppTryout/rpc/call/
> > > > amfrpc/test"
>
> ...
>
> read more »

-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.

Reply via email to