Programa não roda

Gente, estou desenvolvendo um sistema baseado em uma apostila de java com flex, e sou iniciante com flex, por isso preciso da ajuda de vcs!
Nesse sistema eu possuo 2 DataGrids, porem quando eu digito o endereço definido no projeto, no caso “http://localhost:8080/Contatos-Java/debug/Main2.html”, ao inves de rodar o programa normalmente, ele me retorna o seguinte erro: “faultCode:Server.Processing faultString:‘No destination with id ‘contato’ is registered with any service.’ faultDetail:‘null’”
O que pode vir a ser isso?
Se puderem ajudar, muito obrigado!

OBS: Possuo a classe Main2.mxml e depois a Contato.mxml
Aí estão os codigos:

Main2.mxml

[code]<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx=“http://ns.adobe.com/mxml/2009
xmlns:s=“library://ns.adobe.com/flex/spark”
xmlns:mx=“library://ns.adobe.com/flex/mx”
minWidth=“955” minHeight=“600”>

<fx:Script>
	<![CDATA[
		import agenda.*;
		import flash.net.registerClassAlias;
		import mx.managers.PopUpManager;
	]]>
</fx:Script>

<s:creationComplete>
	<![CDATA[
		registerClassAlias("agenda.ContatoVO",agenda.ContatoVO);
		registerClassAlias("agenda.EnderecoVO",agenda.EnderecoVO);
		registerClassAlias("agenda.EstadoVO",agenda.EstadoVO);
		contato.getAll();
		this.systemManager.addEventListener("RefreshContatos",RefreshContatos);
	]]>
</s:creationComplete>

<fx:Declarations>
	<mx:RemoteObject id="contato" destination="contato" fault="OnFault(event)" showBusyCursor="true" >
		<mx:method name="getAll" result="Contato_OnGetAll(event)"/>
		<mx:method name="del" result="Contato_OnDelete(event)"/>
	</mx:RemoteObject>
	
	<mx:RemoteObject id="endereco" destination="endereco" fault="OnFault(event)" >
		<mx:method name="getByContato" result="Endereco_OnGetByContato(event)"/>
	</mx:RemoteObject> 
</fx:Declarations>

<fx:Script>
	<![CDATA[
		import mx.rpc.events.ResultEvent;
		import mx.controls.Alert;
		import mx.rpc.events.FaultEvent;
		
		protected function OnFault(e:FaultEvent):void {
			Alert.show(e.fault.message.toString());
		}
		
		protected function Contato_OnGetAll(e:ResultEvent):void {
			dgContatos.dataProvider = e.result;
		}
		
		protected function Contato_OnDelete(e:ResultEvent):void {
			contato.getAll();
		}
		
		protected function Endereco_OnGetByContato(e:ResultEvent):void {
			dgEnderecos.dataProvider = e.result;
		}			
		
		protected function RefreshContatos(e:Event):void {
			contato.getAll();
		}
		
		protected function GetNumComp(data:Object, col:DataGridColumn):String {
			return (data as EnderecoVO).Numero + "/" + (data as EnderecoVO).Complemento; 
		}	
	]]>
</fx:Script>

<mx:DataGrid id="dgContatos" y="34" left="10" right="10" height="230">
	<mx:columns>
		<mx:DataGridColumn headerText="Nome" dataField="Nome"/>
		<mx:DataGridColumn headerText="Email" dataField="Email"/>
		<mx:DataGridColumn headerText="Telefone" dataField="Telefone"/>
	</mx:columns>
	
	<mx:change>
		<![CDATA[
		endereco.getByContato((dgContatos.selectedItem as ContatoVO).id);
		]]>
	</mx:change>
</mx:DataGrid>

<s:Button x="12" y="5" label="Novo">
	<s:click>
		<![CDATA[
			var telaContao: Contato = new  Contato();
			PopUpManager.addPopUp(telaContao,this,true);
			PopUpManager.centerPopUp(telaContao);
		]]>
	</s:click>
</s:Button>

<s:Button x="90" y="5" label="Editar" enabled="{dgContatos.selectedItem!=null}" >
	<s:click>
		<![CDATA[
			var telaContao: Contato = new  Contato();
			telaContao.setContato((dgContatos.selectedItem as ContatoVO));
			PopUpManager.addPopUp(telaContao,this,true);
			PopUpManager.centerPopUp(telaContao);
		]]>
	</s:click>
</s:Button>

<s:Button x="168" y="5" label="Excluir" enabled="{dgContatos.selectedItem!=null}" >
	<s:click>
		<![CDATA[
			contato.del((dgContatos.selectedItem as ContatoVO).id);
		]]>
	</s:click>
</s:Button>

<s:Label x="10" y="272" text="Endereços:"/>

<mx:DataGrid id="dgEnderecos" y="287" right="11" left="9" height="247">
	<mx:columns>
		<mx:DataGridColumn headerText="Logradouro" dataField="Logradouro" width="350"/>
		<mx:DataGridColumn headerText="Numero/Comp" dataField="" labelFunction="GetNumComp"/>
		<mx:DataGridColumn headerText="CEP" dataField="Cep"/>
	</mx:columns>
</mx:DataGrid>

</s:Application>[/code]

Contato.mxml

[code]<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx=“http://ns.adobe.com/mxml/2009
xmlns:s=“library://ns.adobe.com/flex/spark”
xmlns:mx=“library://ns.adobe.com/flex/mx”
width=“550” height=“500” title=“Contato”
creationComplete=“OnCreationComplete(event)” >

<s:close>
	<![CDATA[
		dispatchEvent(new Event("RefreshContatos",true));
		PopUpManager.removePopUp(this);
	]]>
</s:close>

<fx:Script>
	<![CDATA[
		import agenda.ContatoVO;
		import agenda.EnderecoVO;
		import agenda.EstadoVO;
		import mx.collections.ArrayCollection;
		import mx.collections.ArrayList;
		import mx.controls.Alert;
		import mx.events.FlexEvent;
		import mx.managers.PopUpManager;
		import mx.rpc.events.FaultEvent;
		import mx.rpc.events.ResultEvent;
		
		[Bindable]
		protected var contatoVO:ContatoVO=null;
		[Bindable]
		protected var enderecosVOs:ArrayCollection;
		[Bindable]
		protected var enderecoVO:EnderecoVO=null;
		
		public function setContato(c:ContatoVO):void {
			contatoVO = c;
		}
		
		protected function OnFault(e:FaultEvent):void {
			Alert.show(e.fault.message.toString());
		}
		
		protected function Contato_OnInsert(e:ResultEvent):void {
			dispatchEvent(new Event("RefreshContatos",true));
			//Assim que inserir, deve habilitar o inclusão 
			// de enderecos. Para isso, basta preencher o id
			//  do contatoVO.
			contatoVO.id = parseInt(e.result.toString());
		}
		
		protected function Contato_OnUpdate(e:ResultEvent):void {
			dispatchEvent(new Event("RefreshContatos",true));
		}
		
		protected function Endereco_OnGetByContato(e:ResultEvent):void {
			enderecosVOs = e.result as ArrayCollection;
		}
		
		protected function Endereco_OnInsert(e:ResultEvent):void {
			endereco.getByContato(contatoVO.id);	
		}
		
		protected function Endereco_OnUpdate(e:ResultEvent):void {
			endereco.getByContato(contatoVO.id);	
		}
		
		protected function Endereco_OnDel(e:ResultEvent):void {
			endereco.getByContato(contatoVO.id);	
		}
		
		protected function OnCreationComplete(event:FlexEvent):void {
			estado.getAll();				
			if (contatoVO == null)
				contatoVO = new ContatoVO();
			if (contatoVO.id > 0) {
				endereco.getByContato(contatoVO.id);
			}	
		}
		
		protected function Estado_OnGetAll(e:ResultEvent):void {
			comboEstados.dataProvider = e.result as ArrayCollection;
		}
	]]>
</fx:Script>

<s:layout>
	<s:BasicLayout/>
</s:layout>

<fx:Declarations>
	<mx:RemoteObject id="contato" destination="contato" fault="OnFault(event)" >
		<mx:method name="insert" result="Contato_OnInsert(event)"/>
		<mx:method name="update" result="Contato_OnUpdate(event)"/>
	</mx:RemoteObject>
	
	<mx:RemoteObject id="endereco" destination="endereco" fault="OnFault(event)" >
		<mx:method name="getByContato" result="Endereco_OnGetByContato(event)"/>
		<mx:method name="insert" result="Endereco_OnInsert(event)"/>
		<mx:method name="update" result="Endereco_OnUpdate(event)"/>
		<mx:method name="del" result="Endereco_OnDel(event)"/>
	</mx:RemoteObject> 
	
	<mx:RemoteObject id="estado" destination="estado" fault="OnFault(event)" >
		<mx:method name="getAll" result="Estado_OnGetAll(event)"/>
	</mx:RemoteObject> 
</fx:Declarations>

<s:Label x="10" y="10" text="Nome:"/>
<s:TextInput x="10" y="26" width="197" text="@{contatoVO.Nome}"/>
<s:Label x="215" y="10" text="Email:" />
<s:TextInput x="215" y="26" width="191" text="@{contatoVO.Email}"/>
<s:Label x="414" y="9" text="Telefone:"/>
<s:TextInput x="414" y="25" text="@{contatoVO.Telefone}"/>
<mx:DataGrid x="10" y="56" width="528" id="dgEnderecos" dataProvider="{enderecosVOs}" enabled="{contatoVO.id>0}" >
	<mx:columns>
		<mx:DataGridColumn headerText="Logradouro" dataField="Logradouro"/>
		<mx:DataGridColumn headerText="Numero" dataField="Numero"/>
		<mx:DataGridColumn headerText="Complemento" dataField="Complemento"/>
		<mx:DataGridColumn dataField="Cidade" headerText="Cidade"/>
		<mx:DataGridColumn dataField="Estado" headerText="Estado"/>
		<mx:DataGridColumn dataField="Cep" headerText="Cep"/>
	</mx:columns>
</mx:DataGrid>

<s:Button x="10" y="206" label="Novo Endereço" enabled="{contatoVO.id>0}" >
	<s:click>
		<![CDATA[
			enderecoVO = new EnderecoVO();
			enderecoVO.idcontato = contatoVO.id;
		]]>
	</s:click>
</s:Button>

<s:Button x="123" y="206" label="Editar Endereço" enabled="{dgEnderecos.selectedItem!=null}" >
	<s:click>
		<![CDATA[
			enderecoVO = dgEnderecos.selectedItem as EnderecoVO;
		]]>
	</s:click>
</s:Button>
<s:Button x="426" y="206" label="Excluir Endereço" enabled="{dgEnderecos.selectedItem!=null}" >
	<s:click>
		<![CDATA[
			endereco.del( (dgEnderecos.selectedItem as EnderecoVO).id );
		]]>
	</s:click>
</s:Button>

<s:Panel x="10" y="235" width="528" height="167" dropShadowVisible="false" chromeColor="#E6E9F3" symbolColor="#B6CBEA" title="Endereço:" enabled="{contatoVO.id>0}" >
	<s:Label x="10" y="10" text="Logradouro:"/>
	<s:TextInput x="10" y="26" width="320" text="@{enderecoVO.Logradouro}" enabled="{enderecoVO!=null}" />
	<s:Label x="338" y="10" text="Número:"/>
	<s:TextInput x="338" y="26" width="84" text="@{enderecoVO.Numero}" enabled="{enderecoVO!=null}" />
	<s:Label x="436" y="10" text="Comp:"/>
	<s:TextInput x="436" y="26" width="80" text="@{enderecoVO.Complemento}" enabled="{enderecoVO!=null}" />
	<s:Label x="10" y="56" text="Cep:"/>
	<s:TextInput x="10" y="72" width="84" text="@{enderecoVO.Cep}" enabled="{enderecoVO!=null}" />
	<s:Label x="106" y="55" text="Cidade:"/>
	<s:TextInput x="106" y="71" width="256" text="@{enderecoVO.Cidade}" enabled="{enderecoVO!=null}" />
	<s:Label x="374" y="56" text="Estado:"/>
	<s:ComboBox id="comboEstados" x="370" y="71" labelField="Abr" />
	<s:Button x="405" y="102" label="Salvar Endereço">
		<s:click>
			<![CDATA[
				enderecoVO.idestado = (comboEstados.selectedItem as EstadoVO).id;
				if (enderecoVO.id>0)
				endereco.update(enderecoVO);
				else
				endereco.insert(enderecoVO);
			]]>
		</s:click>	
	</s:Button>
</s:Panel>

<s:controlBarContent>
	<s:Button label="Salvar">
		<s:click>
			<![CDATA[
				if (contatoVO.id > 0)
				contato.update(contatoVO);
				else
				contato.insert(contatoVO);
			]]>
		</s:click>
	</s:Button>
	<s:Button label="Fechar">
		<s:click>
			<![CDATA[
				dispatchEvent(new Event("RefreshContatos",true));
				PopUpManager.removePopUp(this);
			]]>
		</s:click>
	</s:Button>
</s:controlBarContent>

</s:TitleWindow>[/code]

Aí a imagem de quando aparece o erro: