Oh yes, I completely forgot about the crossdomain.xml file. You can do a
search on this here and will get thousands of hits.

Basically, if your Flex application requires access to another server,
that server must have a crossdomain.xml file in its root directory (ie.
It must be able to be accessed at http://myserver.com/crossdomain.xml).

There are articles available on Adobe's web site regarding this:
http://www.adobe.com/devnet/flashplayer/articles/flash_player9_security_\
update.html
<http://www.adobe.com/devnet/flashplayer/articles/flash_player9_security\
_update.html>
http://www.adobe.com/devnet/flashplayer/articles/flash_player_9_security\
.pdf
<http://www.adobe.com/devnet/flashplayer/articles/flash_player_9_securit\
y.pdf>

Most of this stuff is a bit over my head so you may just want to use my
crossdomain.xml file.

This is my crossdomain.xml file:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd";>
<cross-domain-policy>
   <site-control permitted-cross-domain-policies="all">
     <allow-access-from domain="*" ports="*" />
     <allow-access-from domain="*" to-ports="*" secure="true" />
     <allow-http-request-headers-from domain="*" headers="*" />
   </site-control>
</cross-domain-policy>

This is pretty open so probably shouldn't be used on a production
server. I am in a closed network (Only internal access allowed) so I am
not too worried.

As an aside, I would recommend getting a debugging proxy like Charles -
http://www.charlesproxy.com (There are others out there as well but I
got Charles because it is cross platform). These utilities allow you to
see incoming and outgoing traffic and they understand AMF. This is
important as you can see your value objects as they are being passed. I
find this tool indispensable when working with Remote Objects (Not to
mention SOAP and other requests).

--- In [email protected], "timgerr" <[EMAIL PROTECTED]> wrote:
>
> OK, I did everything that was given and when I run the app I get this
> error:
> warning: Failed to load policy file from
http://127.0.0.1/crossdomain.xml
>
> *** Security Sandbox Violation ***
> Connection to http://127.0.0.1/weborb/weborb.php halted - not
> permitted from
> http://localhost/weborb/WebORBExample-debug/WebORBExample.swf
> Error: Request for resource at http://127.0.0.1/weborb/weborb.php by
> requestor from
> http://localhost/weborb/WebORBExample-debug/WebORBExample.swf is
> denied due to lack of policy file permissions.
>
> Not sure what to do here.
>
> Thanks for the help,
> timgerr
>
>
>
>
> --- In [email protected], "valdhor" stevedepp@ wrote:
> >
> > This seems to be a convoluted way to do this.
> >
> > I have created a simple example to show you how I use WebOrb.
> >
> > On my server I have the WebORB directory at the root level. In the
> > Services directory I have a MyServices directory and in this
directory I
> > have a ValueObjects directory. For this example I have two files:
> >
> >
=====================================================================
> > TestNamesInVO.php:
> > <?php
> > class TestNamesInVO
> > {
> >      public $FirstName;
> >      public $LastName;
> >
> >      public function __construct($FirstName, $LastName)
> >      {
> >          $this->FirstName = $FirstName;
> >          $this->LastName = $LastName;
> >      }
> > }
> > ?>
> >
=====================================================================
> > TestNamesOutVO.php:
> > <?php
> > class TestNamesOutVO
> > {
> >      public $FullName;
> >
> >      public function __construct($FullName)
> >      {
> >          $this->FullName = $FullName;
> >      }
> > }
> > ?>
> >
=====================================================================
> >
> > The constructors are there just to make it easier to create a new
> > object. They are optional.
> >
> > In the MyServices directory I have a TestService.php file. This
contains
> > all the functions available with this service.
> >
> >
=====================================================================
> > TestService.php:
> > <?php
> > class TestService
> > {
> >      function ShowMe()
> >      {
> >          return "Tom Jones";
> >      }
> >
> >      function ShowName($name)
> >      {
> >          return 'Hello ' . $name;
> >      }
> >
> >      function ShowNames(TestNamesInVO $namesIn)
> >      {
> >          require_once("ValueObjects/TestNamesInVO.php");
> >          require_once("ValueObjects/TestNamesOutVO.php");
> >
> >          $fullName = new TestNamesOutVO($namesIn->FirstName . " " .
> > $namesIn->LastName);
> >
> >          return $fullName;
> >      }
> > }
> > ?>
> >
=====================================================================
> >
> > In flex I also have a ValueObjects folder underneath my src folder.
This
> > folder contains the corresponding ActionScript files for the value
> > objects on the server:
> >
> >
=====================================================================
> > TestNamesInVO.as:
> > package ValueObjects
> > {
> >      [RemoteClass(alias="MyServices.ValueObjects.TestNamesInVO")]
> >      [Bindable]
> >      public class TestNamesInVO
> >      {
> >          //instance variables
> >          private var _FirstName:String;
> >          private var _LastName:String;
> >
> >          //accessor methods
> >          public function get FirstName():String {return _FirstName;}
> >          public function get LastName():String {return _LastName;}
> >
> >          //mutator methods
> >          public function set FirstName(FirstName:String):void
> {_FirstName
> > = FirstName;}
> >          public function set LastName(LastName:String):void
{_LastName =
> > LastName;}
> >      } // end class
> > }//end package
> >
=====================================================================
> > TestNamesOutVO.as:
> > package ValueObjects
> > {
> >      [RemoteClass(alias="MyServices.ValueObjects.TestNamesOutVO")]
> >      [Bindable]
> >      public class TestNamesOutVO
> >      {
> >          //instance variables
> >          private var _FullName:String;
> >
> >          //accessor methods
> >          public function get FullName():String {return _FullName;}
> >
> >          //mutator methods
> >          public function set FullName(FullName:String):void
{_FullName =
> > FullName;}
> >      } // end class
> > }//end package
> >
=====================================================================
> >
> > Note the RemoteClass metadata. This tells flex the location of the
class
> > on the server that matches this class (In relation to the Services
> > directory).
> >
> > Finally we have the Flex application that makes calls to functions
> > within this service.
> >
> >
=====================================================================
> > WebORBExample.mxml:
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > layout="absolute"
> >      creationComplete="onCreationComplete()">
> >      <mx:Script>
> >          <![CDATA[
> >              import mx.messaging.channels.AMFChannel;
> >              import mx.messaging.ChannelSet;
> >              import mx.rpc.events.FaultEvent;
> >              import mx.rpc.events.ResultEvent;
> >              import mx.rpc.remoting.RemoteObject;
> >              import mx.managers.CursorManager;
> >              import mx.controls.Alert;
> >              import ValueObjects.TestNamesInVO;
> >              import ValueObjects.TestNamesOutVO;
> >
> >              private var channelSet:ChannelSet;
> >              private var amfChannel:AMFChannel;
> >              private var testService:RemoteObject;
> >
> >              private function onCreationComplete():void
> >              {
> >                  channelSet = new ChannelSet();
> >                  amfChannel = new AMFChannel("my-amf",
> > "http://myserver/WebORB/weborb.php";);
> >                  channelSet.addChannel(amfChannel);
> >
> >                  testService = new RemoteObject();
> >                  testService.channelSet = channelSet;
> >                  testService.destination = "MyServices.TestService";
> >                  testService.requestTimeout = 15;
> >
> >                 
testService.ShowMe.addEventListener(ResultEvent.RESULT,
> > ShowMeHandler);
> >
> > testService.ShowName.addEventListener(ResultEvent.RESULT,
> > ShowNameHandler);
> >
> > testService.ShowNames.addEventListener(ResultEvent.RESULT,
> > ShowNamesHandler);
> >                  testService.addEventListener(FaultEvent.FAULT,
> > faultHandler);
> >              }
> >
> >
> >              private function runShowNames():void
> >              {
> >                  var person:TestNamesInVO = new TestNamesInVO();
> >                  person.FirstName = "Tom";
> >                  person.LastName = "Jones";
> >                  testService.ShowNames(person);
> >                  CursorManager.setBusyCursor();
> >              }
> >
> >              private function ShowMeHandler(event:ResultEvent):void
> >              {
> >                  Alert.show(event.result.toString());
> >              }
> >
> >              private function
ShowNameHandler(event:ResultEvent):void
> >              {
> >                  Alert.show(event.result.toString());
> >              }
> >
> >              private function
ShowNamesHandler(event:ResultEvent):void
> >              {
> >                  CursorManager.removeBusyCursor();
> >                  var personReturned:TestNamesOutVO = event.result as
> > TestNamesOutVO;
> >                  Alert.show(personReturned.FullName);
> >              }
> >
> >              private function faultHandler(fault:FaultEvent):void
> >              {
> >                  CursorManager.removeBusyCursor();
> >                  switch(fault.fault.faultCode.toString())
> >                  {
> >                      case "Client.Error.RequestTimeout":
> >                           Alert.show("The server is not responding.
> > Please check that you are connected and the server is running.",
"Server
> > Timeout");
> >                         break;
> >                      default:
> >                          Alert.show(fault.fault.faultString,
> > fault.fault.faultCode.toString());
> >                      break;
> >                  }
> >              }
> >
> >          ]]>
> >      </mx:Script>
> >      <mx:HBox horizontalAlign="center">
> >          <mx:Button label="ShowMe" click="{testService.ShowMe()}"/>
> >          <mx:Button label="ShowName"
click="{testService.ShowName('Tom
> > Jones')}"/>
> >          <mx:Button label="ShowNames" click="runShowNames()"/>
> >      </mx:HBox>
> > </mx:Application>
> >
=====================================================================
> >
> > If you have any more questions, please don't hesitate to ask.
> >
> >
> >
> > --- In [email protected], "timgerr" <tim.gallagher@> wrote:
> > >
> > > OK, so I have created this hello world service and then had WebOrb
> > > create the code I see in the actionscript comments This:
> > >
> > > (If using Model-View-Controller)
> > > - Modify the constructor of the class below to accept the
controller
> > > object
> > > - Modify response handlers to pass return values to the controller
> > >
> > > (if not using MVC)
> > > - Modify the constructor of the class below to accept your View
object
> > > - Modify response handlers to display the result directly in the
View
> > >
> > > I am not useing MVC so I have to use the 2nd commented option. 
the
> > > problem is I am not sure what to do, someone help me?
> > >
> > > Here is my PHP code:
> > > <?php
> > > class HelloWorld {
> > >  function ShowMe()
> > >  {
> > >   return "Tom Jones";
> > >  }
> > >  function ShowName($name)
> > >  {
> > >   return 'Hello ' . $name;
> > >  }
> > > }
> > > ?>
> > > So I have 2 methods, ShowMe and ShowName.
> > >
> > > Here is my as code:
> > >    package comp.HelloWorld
> > >    {
> > >    import mx.rpc.remoting.RemoteObject;
> > >    import mx.controls.Alert;
> > >    import mx.rpc.events.ResultEvent;
> > >    import mx.rpc.events.FaultEvent;
> > >    import mx.rpc.AsyncToken;
> > >        import mx.rpc.IResponder;
> > >
> > >    import comp.HelloWorld.vo.*;
> > >
> > >    public class HelloWorld
> > >    {
> > >    private var remoteObject:RemoteObject;
> > >    private var model:HelloWorldModel;
> > >
> > >    public function HelloWorld( model:HelloWorldModel = null )
> > >    {
> > >     remoteObject  = new RemoteObject("GenericDestination");
> > >     remoteObject.source = "comp.HelloWorld.HelloWorld";
> > >
> > >     remoteObject.ShowMe.addEventListener("result",ShowMeHandler);
> > >    
remoteObject.ShowName.addEventListener("result",ShowNameHandler);
> > >     remoteObject.addEventListener("fault", onFault);
> > >
> > >      if( model == null )
> > >      model = new HelloWorldModel();
> > >
> > >     this.model = model;
> > >
> > >    }
> > >
> > >       public function setCredentials( userid:String,
password:String
> > > ):void
> > >       {
> > >         remoteObject.setCredentials( userid, password );
> > >       }
> > >
> > >       public function GetModel():HelloWorldModel
> > >       {
> > >         return this.model;
> > >       }
> > >
> > >    public function ShowMe(  responder:IResponder = null):void
> > >   {
> > >     var asyncToken:AsyncToken = remoteObject.ShowMe();
> > >
> > >    if( responder != null )
> > >     asyncToken.addResponder( responder );
> > >   }
> > >
> > >    public function ShowName( name:String, responder:IResponder =
> > > null):void
> > >   {
> > >     var asyncToken:AsyncToken = remoteObject.ShowName( name);
> > >
> > >    if( responder != null )
> > >     asyncToken.addResponder( responder );
> > >   }
> > >    public virtual function ShowMeHandler(event:ResultEvent):void
> > >    {
> > >     var returnValue:Object = event.result as Object;
> > >     model.ShowMe = event.result as Object;
> > >    }
> > >
> > >    public virtual function ShowNameHandler(event:ResultEvent):void
> > >    {
> > >     var returnValue:Object = event.result as Object;
> > >     model.ShowName = event.result as Object;
> > >    }
> > >
> > >   public function onFault (event:FaultEvent):void
> > >    {
> > >     Alert.show(event.fault.faultString, "Error");
> > >    }
> > >   }
> > >
> > >   }
> > >
> > > I get an error on: import comp.HelloWorld.vo.* (not sure what this
is
> > > or how to create it)
> > >
> > >
> > > And here is another chunck of code that I have to modify
> > >
> > >  public virtual function ShowMeHandler(event:ResultEvent):void
> > > {
> > >      var returnValue:Object = event.result as Object;
> > >      model.ShowMe = event.result as Object;
> > > }
> > >
> > > public virtual function ShowNameHandler(event:ResultEvent):void
> > > {
> > >      var returnValue:Object = event.result as Object;
> > >      model.ShowName = event.result as Object;
> > > }
> > >
> > > I get an error:
> > > (Severity and Description Path Resource Location Creation Time Id
> > > 1119: Access of possibly undefined property ShowMe through a
reference
> > > with static type comp.HelloWorld:HelloWorldModel.
> > > WeborbHelloworld/src/comp/HelloWorld HelloWorld.as line 95
> > > 1222790567712 8938)
> > >
> > > On these 2 lines of code:
> > > model.ShowMe = event.result as Object;
> > > model.ShowName = event.result as Object;
> > >
> > > I just want to return that stuff, what do I have to do in order to
fix
> > > the errors.
> > >
> > > Thanks,
> > > timgerr
> > >
> >
>

Reply via email to