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" class="flex.messaging.endpoints.AMFEndpoint"/> > > </channel-definition> > > <channel-definition id="ch-amfrpc2" > > class="mx.messaging.channels.AMFChannel"> > > <endpoint uri="http://127.0.0.1:8000/AppTryout/rpc2/ > > gateway/test" class="flex.messaging.endpoints.AMFEndpoint"/> > > </channel-definition> > > </channels> > > </services-config> > > > ------- > > > When I run the Flex app, I got the follwing trace: > > > faultCode:Service.ResourceNotFound faultString:'Unknown service dest- > > amfrpc.test' faultDetail:'' > > faultCode:Service.ResourceNotFound faultString:'Unknown service dest- > > amfrpc2.test' faultDetail:'' > > > But httpserver.log says something else this time: > > > 127.0.0.1, 2010-03-09 20:57:22, POST, /AppTryout/rpc/call/amfrpc/test, > > HTTP/1.1, 200, 4.328000 > > 127.0.0.1, 2010-03-09 20:57:27, POST, /AppTryout/rpc2/gateway/test, > > HTTP/1.1, 200, 10.093000 > > > So, Flex reaches the server and gets valid response, but then fails to > > handle it for some reson. > > > At this moment I'm at a loss, because I don't know whether my mistake > > is at client-side or server-side. > > Any help will be greatly appreciated. > > Thanks! -- 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.