ago 09 2008
Integrando Adobe Flex - FluorineFx - C#.net (Parte 2/2)
[ Assista agora a palestra sobre este post realizada durante a Flex Mania 2009 ]
Olá pessoal, hoje finalmente vou postar a segunda parte do artigo, neste post vamos utilizar os nossos métodos Insere e Lista, criados anteriormente no asp.net.
Então vamos lá…
1 - Crie um projeto no Flex do tipo Flex Project e nomeie como IntegracaoFlex.
2 - Crie uma pasta chamada mapeamento dentro da pasta src do projeto. (Botão direito do mouse sobre a pasta src New>Folder). O Flex interpreta esta pasta como um package, é um conceito muito parecido com o das Namespaces no Visual Studio. Dentro desta pasta vamos mapear as nossas classes criadas no asp.net, como no nosso exemplo temos uma classe só, a Pessoa, vamos implementa-la.
3 - Crie uma nova classe dentro de nossa pasta/package mapeamento, dê o nome de Pessoa, este nome deve ser idêntico ao da classe criada anteriormente no asp.net. (Botão direito sobre a pasta mapeamento New>ActionScript Class), preencha apenas o campo Name com o valor Pessoa.
4 - Agora vamos implementar apenas os atributos da nossa classe criada no asp.net, portanto deixe a classe pessoa da seguinte maneira:
package mapeamento
{
[RemoteClass(alias="IntegracaoFlex.Pessoa")]
public class Pessoa
{
private var _id_Pessoa:int;
public function get Id_Pessoa():int { return this._id_Pessoa; }
public function set Id_Pessoa(valor:int):void { this._id_Pessoa = valor; }
private var _nome:String;
public function get Nome():String { return this._nome; }
public function set Nome(valor:String):void { this._nome = valor; }
private var _telefone:String;
public function get Telefone():String { return this._telefone; }
public function set Telefone(valor:String):void { this._telefone = valor; }
public function Pessoa()
{
}
}
}
Desta forma temos a classe Pessoa com os atibutos Id_Pessoa, Nome e Telefone, note que o conceito para o desenvolvimento dos nossos atributos é muito parecido com a do C#.net, ou seja, temos as palavras reservadas get e set para que o complilador entenda que determinada function é um atributo da classe, e não uma function convencional.
Assim como no nome da classe, o nome dos atributos também devem ser idênticos no C#.net e no ActionScript, inclusive os tipos, para que o fluorine fa’xa a serialização C#.net>ActionScript corretamente. Veja mais na documentação oficial do fluorine a tabela completa de serialização.
5 - Agora vamos realmente fazer o mapeamento dos objetos ActionScript>C#.net, para isso, crie um arquivo XML dentro da pasta src do nosso projeto e dê o nome de services-config.xml (Botão direito do mouse sobre a pasta src New>File). Preencha o campo File name com o valor services-config.xml. Deixe o arquivo da seguinte maneira:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="remoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="fluorine">
<channels>
<channel ref="my-amf"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost:3024/Negocio/Gateway.aspx"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
Agora execute o seu website criado no VisualStudio anteriormente, ele deverá exibir a lista de arquivos encontrados, isso acontece por que não temos uma página Default.aspx, clique sobre a página Gateway.aspx no navegador, ele abrirá uma pagina em branco, pois não temos nada de interface na Gateway.aspx, o que precisamos agora é do endereço dessa página, copie na barra de endereços do navegador, deve ser algo parecido com (http://localhost:3024/Negocio/Gateway.aspx), o que vai alterar é apenas o número da porta gerado pelo servidor web do VisualStudio, e coloque o endereço na tag uri do atributo endpoint, para este endereço de sua página Gateway no arquivo XML criado agora.
6 - Agora para finalizarmos o mapeamento, precisamos informar ao compilador do Flex que a configuração de serviços remotos que utilizamos em nosso projeto é o arquivo services-config.xlm, para isso, vá até o Flex Navigator, clique com o botão direito do mouse sobre o projeto IntegracaoFlex>Properties, ele abrirá a janela de propriedades de seu projeto, vá até o menu FlexCompiler e deixe o campo Additional compiler arguments com o seguinte valor:
-locale en_US -services services-config.xml
7 - Pronto, o nosso projeto está configurado e vai enxergar a nossa classe no asp.net, agora vamos testar.
8 - Abra o arquivo principal de nosso projeto, o IntegracaoFlex.mxml e adicione uma tag <mx:Script></mx:Script>.
Dentro da tag importe os seguintes packages:
import mx.collections.ArrayCollection;
import mx.rpc.remoting.mxml.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mapeamento.Pessoa;
Logo abaixo, crie duas functions:
/**
* Prepara um objeto remoto para executar um método no asp.net.
**/
private function preparaRemoteObj(fncFalha:Function, fncOk:Function = null):RemoteObject{
//Instancia um objeto remoto pegando as configurações do nosso arquivo services-config.xml
var remoteObj:RemoteObject = new RemoteObject("fluorine"); //<destination id="fluorine">
remoteObj.source = "IntegracaoFlex.Pessoa"; // Namespace.NomeDaClasse no ASP.net
remoteObj.showBusyCursor = true; // Exibe o relogio no lugar do cursor durante a requisição
//Adiciona o evento falha na lista de eventos do ojeto remoto
remoteObj.addEventListener(FaultEvent.FAULT, fncFalha);
//Verifica se é null porque nem sempre um método vai retornar algum valor.
if (fncOk != null)
//Adiciona a funcao passada como parametro neste método,
//ela é responsável por tratar o retorno do método asp.net
remoteObj.addEventListener(ResultEvent.RESULT, fncOk);
return remoteObj; //retorna o objeto remoto configurado.
}
/**
* Tratamento de erro do método executado no asp.net.
**/
private function rstFalha(evt:FaultEvent):void{
Alert.show("Ocorreu o seguinte erro ao tentar executar o método:\n" +
evt.fault.message, "Erro");
}
A function preparaRemoteObj instancia um objeto do tipo RemoteObject e o configura para executar os métodos do asp.net. (vide comentários)
A function rstFalha trata um possível erro durante a chamada do método asp.net.
TESTANDO O MÉTODO INSERE
9 - Como vocês devem ter visto, por enquanto não executamos nenhum método do asp.net ainda, vamos fazer isto agora. Primeiramente vamos testar o método Insere criado anteriormente chamando-o em um evento click de um button, portanto adicione 3 componentes Label, 3 componentes TextInput e 1 componente Button. Renomeie os componentes da seguinte forma:
TextInputs: txtId_Pessoa, txtNome, txtTelefone
Button: btnInserir
10 - Agora vamos criar mais duas functions dentro de nossa tag <mx:Script></mx:Script>:
/**
* Tratamento do retorno do método Insere executado no asp.net.
**/
private function rstSucessoInsere(evt:ResultEvent):void{
if (evt.result != null){
Alert.show("Método executado com sucesso!\n\n" +
(evt.result as String), "Ok");
}
}
/**
* Evento click do botão Inserir.
**/
private function btnInserir_click(evt:MouseEvent):void{
if (evt.type == MouseEvent.CLICK){
//Configura a Pessoa
var pessoa:Pessoa = new Pessoa;
pessoa.Id_Pessoa = int(txtId_Pessoa.text);
pessoa.Nome = txtNome.text;
pessoa.Telefone = txtTelefone.text;
//Executa o método no asp.net
var remoteObj:RemoteObject = preparaRemoteObj(rstFalha, rstSucessoInsere);
remoteObj.getOperation("Insere").send(pessoa);
}
}
11 - Agora adicione a tag click="btnInserir_click(event);" no button btnInserir, ele ficará da seguinte forma:
<mx:Button x="167" y="96"
label="Inserir"
id="btnInserir"
click="btnInserir_click(event);"/>
12 - Para testarmos a aplicação, primeiramente execute o website no visual studio, depois compile o projeto no flex. O navegador será aberto, preencha os campos e clique sobre o botão Inserir. Vocé deverá ver uma mensagem na tela com dos dados do cliente inserido. Caso ocorreu algum erro, verifique se todos os passos foram feitos corretamente.
TESTANDO O MÉTODO LISTA
13 - Finalmente vamos testar o nosso método Lista que retorna um List<Pessoa> do asp.net. Para isso adicione 1 componente DataGrid e 1 Componente Button. Renomeie os componentes da seguinte forma:
DataGrid: grdPessoas
Button: btnLista
14 - Edite as colunas do DataGrid deixando-as da seguinte forma:
<mx:DataGrid y="42" width="489" right="10" id="grdPessoas" height="200">
<mx:columns>
<mx:DataGridColumn headerText="Id" dataField="Id_Pessoa" width="20"/>
<mx:DataGridColumn headerText="Nome" dataField="Nome" width="40"/>
<mx:DataGridColumn headerText="Telefone" dataField="Telefone" width="40"/>
</mx:columns>
</mx:DataGrid>
Note que o atributo dataField deve ser idêntico ao atributo da classe Pessoa que será retornado.
/**
* Tratamento do retorno do método Lista executado no asp.net.
**/
private function rstSucessoLista(evt:ResultEvent):void{
if (evt.result != null){
grdPessoas.dataProvider = (evt.result as ArrayCollection);
}
}
/**
* Evento click do botao Lista
**/
private function btnListar_click(evt:MouseEvent):void{
if (evt.type == MouseEvent.CLICK){
//Executa o método no asp.net
var remoteObj:RemoteObject = preparaRemoteObj(rstFalha, rstSucessoLista);
remoteObj.getOperation("Lista").send();
}
}
<mx:Button y="12" right="10"
label="Listar"
id="btnListar"
click="btnListar_click(event);"/>



agosto 18th, 2008 at 11:39
Cara, faço parte do grupo CSharp-Br e fiquei surpreso com a qualidade de seu tutorial.
Ainda não executei os passos mais desde já lhe dou os parabens!
Conheço Flex da verssão 2.0, sei que no primeiro mundo ele é amplamente utilizado e aqui
no brasil é menos conhecido. Parabens, copiar é facil, ser criativo é o verdadeiro desafio.
agosto 18th, 2008 at 12:52
Wilson, são comentários como esse que me motiva a escrever artigos, compartinhando um pouco de conhecimento, pois tudo que sei hoje sobre Flex, também foi pesquisando em blogs, fóruns, listas de discussões, e no dia-a-dia aqui da empresa.
Sou novato ainda nesta área, mas é bom saber que estou conseguindo ajudar um pouco.
Obrigado!! =D
agosto 18th, 2008 at 13:07
Boa tarde Vinicius!!!
Otimo tutorial!!!
Gostaria d uma sugetão de metodo para implementar varias classes c#.Net dentro do Adobe flex
agosto 19th, 2008 at 14:20
Então Vinícius, o conceito é o mesmo, mas recomendo vc criar uma classe que herda a classe RemoteObject para que você use sempre ela, implementa nela um método parecido com o preparaRemoteObj e use sempre ela em todas as suas telas, para executar os métodos asp.net
Agora já o mapeamento das classes não é necessário, mas é recomendável da forma como exemplifiquei, ou seja, reescrever todas as suas classes do seu projeto asp.net apenas com os atributos no flex, para a serialização.
Bom é isso.
outubro 17th, 2008 at 15:28
Boa tarde Vinícios, tudo ok?!
Parabéns por teu tutorial! Muito bom!
Cara, estou com dúvidas e problemas na hora de transferir um List de classes VOs para o Flex. Estes VOs, assim como no teu exmeplo, possuem um correspondente idêntico em ambos os lados (C#/Flex). Gostaria de saber como que faço para que o Flex entenda q o List q estou enviando corresponde a um objeto (Array ou ArrayColection por exemplo) com vários objetos VO do Flex.
Muito grato rapaz!
[ ]s
outubro 18th, 2008 at 11:46
Então Júnior, me fala mais sobre o seu método ASP.net, você retorna o que nele?
No tutorial uso um List, já tentou fazer usando assim?
novembro 24th, 2008 at 16:43
Boa Tarde Vinicius estou tentando seguir o seu tutorial ], porém não consigo executar ele e sempre me passa o seguinte erro:
Ocorreu o seguinte erro ao tentar executar o método:
faultCode:InvokeFailed faultString:’[MessagingError message='Destination 'fluorine' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']‘ faultDetail:’Couldn’t establish a connection to ‘fluorine”
Pelo jeito parece que ele não consegue invocar os métodos ASP.net, porém fiz e refiz as configurações corretamente e o erro continua.
novembro 24th, 2008 at 17:12
Boa tarde Roberto, é isso mesmo, o Flex não está enxergando os métodos ASP.net.
Veja se você fex todas essas configurações:
* No Flex>Properties… do projeto, você colocou o services-config.xml?? (Passo 6 da Parte 2)
* Colocou a tag [RemotingService] na classe do ASP.net. (Passo 12 da Parte1)
* Colocou a tag [RemoteClass(alias="IntegracaoFlex.Pessoa")] na classe do Flex. (Passo 4 da Parte 2)
Dê uma olhada com calma, você deve ter esquecido algo. Qualquer coisa baixe o Source do projeto, está disponível neste link:
http://www.viniciussandim.com/downloads/IntegracaoFlex.rar
novembro 25th, 2008 at 07:47
Bom dia Vinícius, O último item eu coloquei errado a taga estava desse jeito[RemoteClass(alias="IntegracaoFlex.pessoa")], mas mesmo assim gera o mesmo erro, baixei o fonte e darei uma olhada linha a linha. O Visual Studio que estou usando é o 2008, será que tem algo nisso????
novembro 25th, 2008 at 08:18
Não tem problema nenhum, funciona também no Visual Studio 2008, mas nele você deve usar a biblioteca referente ao framework 3.5 do FluorineFx, e não a do 2.0,como mostra o tutorial.
Se você não alterou o caminho na instalação, ela deveá estar em C:\Program Files\FluorineFx\Bin\net\3.5.
novembro 25th, 2008 at 08:49
Desde o inicio fiz essas referências para o 3.5.
Estou sem idéia do que possa ser.
novembro 25th, 2008 at 09:20
Já baixei o source do projeto, e tentei executar mas o erro que gera é sobre o endereço do endpoint, porém já alterei para a minha aplicação ASP.Net e continua com a mesma mensagem de não poder acessar ‘http://localhost:3024/Negocio/Gateway.aspx’ aqui na minha máquina é ‘http://localhost:3041/Gateway.aspx’.
novembro 25th, 2008 at 09:32
não sei o que fiz aqui que agora está funcionando direitinho, eu não mechi em nada e ele integrou legal com o ASP.Net. Mistério da Informática, vlw pela ajuda Vinícius.
novembro 25th, 2008 at 20:24
Galera, to com um problemão no fluorineFx, alguém sabe o motivo de uma string (só que com números ex : 4444444444555555555555555 )
me retorna isso ???????????? obs ( exemplo do fluorinefx )
“Gateway echo: 4,44444444455556E+24″
novembro 25th, 2008 at 20:48
Olha Claudio, infelizmente não posso te ajudar, não conheço o exemplo do FluorineFx.
Mas tenta seguir o tutorial passo a passo que não tem erro.
Se preferir baixa o Source pra ver o funcionamento, talvez fique mais fácil.
novembro 26th, 2008 at 10:38
Valew Vinicius, mas já li toda a documentação …. e não tem nda referente a isso. mas já uso o fluorine há algum tempo e fui ver que isso ocorre só agora ….. coisa de maluco “”"
novembro 27th, 2008 at 10:11
Bom dia, Vinúcius.
Agora eu estou utilizando a solução FlurineFx para integrar o Flex com a minha aplicação ASP.Net, fiz todos os passos corretamente e dá esse erro:
faultCode:Client.Error.MessageSend faultString:’Send failed’ faultDetail:’Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url: ‘http://localhost:1977/card/Gateway.aspx”
esse link eu consigo acessar via browser.
dezembro 22nd, 2008 at 17:53
Boa noite Vinicius!
Muito obrigado pelo tutorial! Funcionou certinho aqui.
Parabéns!
janeiro 1st, 2009 at 20:30
Estou fazendo aqui com o Flex 3 e Visual Studio 2008 mas esbarrei em alguns provaveis erros de digitação. Podem ser erros meus, mas caso não sejam podem ajudar a fazer pequenos reparos no execelente tutorial.
como estou copiando e colando e logo os imports não foram gerados e gerou erro de compilação;
Tive que acrescentar os seguintes
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
import mx.controls.Button;
import classesMapeamento.*;
Outro erro estava associado ao package mapeamento dentro de classesMapeamento. Podem ter nomes diferentes?
Quando alterei para
package classesMapeamento
{
[RemoteClass(alias="IntegracaoFlex.Pessoa")] //Namespace.Classe do asp.net
ao contrário de package mapeamento parou de dar erro de compilação.
No script o campo está
pessoa.Id_Pessoa = int(txtId_Cadastro.text);
mas na recomendação para nomear o TextInput está
TextInputs: txtId_Pessoa, txtNome, txtTelefone
Button: btnInserir
Alterei então para pessoa.Id_Pessoa = int(txtId_Pessoa.text);
e parou de dar erro de compilação
Acho que segui tudo direito, mas fiquei com dúvidas na parte final. Fiz o Release Build no Flex e copiei para o diretório aonde estava rodando o projeto do VisualStudio via o servidor interno dele.
Quando clico em Listar recebo
Error: Cannot assign operations into an RPC Service (showBusyCursor)
at mx.rpc::AbstractService/http://www.adobe.com/2006/actionscript/flash/proxy::setProperty()
at IntegracaoFlex/preparaRemoteObj()
at IntegracaoFlex/btnListar_click()
at IntegracaoFlex/__btnListar_click()
O que devo estar fazendo de errado ?
Grato
janeiro 2nd, 2009 at 18:40
Oi Carlos, boa noite…
Muito obrigado por postar estes erros que foram encontrados no tutorial, vou providenciar as correções em breve.
Sobre o erro que você apontou, ele está ocorrendo porque você importou a classe RemoteObject do package errado.
O correto é :
- mx.rpc.remoting.mxml.RemoteObject;
E não:
- mx.rpc.remoting.RemoteObject;
Isso já havia ocorrido com um outro desenvolvedor, meu xará rsrsr…
http://www.viniciussandim.com/?p=80#comment-18
=D
março 23rd, 2009 at 13:04
Ola vinicius, segui o seu tutorial e funcionou direitinho so que agora parou de funcionar a serialização do objeto ta aparecendo o seguinte erro
Ocorreu um erro ao tentar executar o método no asp.net.
faultCode:Server.Processing faultString:’Could not find a suitable method with name Insere’ faultDetail:’null’
minhas classes estao igual o exemplo
março 23rd, 2009 at 14:15
Marco, dá uma conferida na assinatura do método Insere, lembre-se que o C# é case sensitive, veja tambem se no send() do getOperation do Flex você está enviando os atributos que são esperados no C#.
Se você não encontrar, tem o source deste projeto disponível para download neste link:
http://www.viniciussandim.com/downloads/IntegracaoFlex.rar
100 +;
março 30th, 2009 at 13:07
Vinicius fiz como você aconselhou, porém o flex não acha o método Inserir
março 30th, 2009 at 18:13
Daniele, de uma olhada com calma, deve estar faltando algum detalhe pequeno.
O tutorial já foi feito por várias pessoas e funciona normalmente.
abril 27th, 2009 at 11:30
Olá Vinicius bom dia!
Cara trabalho com Flex a pouco mais de 1 ano e nunca trabalhei com C#, gostaria que vc me desse um exemplo de como fazer um CRUD no C# acessando dados diretamente de um BD!!!!
Ou me passasse algum tutorial da net que vc tenha conhecimento.
Abraços.
abril 27th, 2009 at 19:58
Hey, boa noite…
Você já viu o exemplo da agenda, é um CRUD básico com C# acessando Access:
http://www.viniciussandim.com/?p=167
Att
junho 18th, 2009 at 17:43
Vinícius:
Primeiramente gostaria de parabenizá-lo pelo excelente artigo. Comecei a trabalhar com Flex e precisava integrar com ASP.NET usando Fluorine. Esse tutorial me salvou.
Sem querer abusar gostaria de uma ajuda. Dá uma olhada no código abaixo:
private function rstSucessoCombo(evt:ResultEvent):void {
if (evt.result != null) {
cbo.dataProvider = (evt.result as ArrayCollection);
}
}
private function preencheComboUso(): void {
//Executa o método no asp.net
var remoteObj:RemoteObject = preparaRemoteObj(rstFalha, rstSucessoCombo);
remoteObj.getOperation(”busListar”).send();
}
private function showDetails():void {
preencheCombo();
var arrAux: ArrayCollection = ArrayCollection(cbo.dataProvider);
}
Tentei resumir o código para não ficar complicado. Ao executar a função showDetails() eu observo que a variável auxArr retorna uma lista vazia. O curioso é que somente depois de executar o método showDetails é que ele executa a função rstSucessoCombo, sendo que esta função que traz os dados do banco. Desta forma o array fica sempre vazio pois ele só chama o rstSucessoCombo após a execução do método que chamou o RemoteObj.
Poderia me ajudar?
Obrigado.
junho 20th, 2009 at 17:14
Olá Christiano, é o seguinte..
O Flex trabalha de forma assíncrona, e por esse motivo temos sempre que ter uma função de Result, assim como é a sua rstSucessoCombo.
Acontece o seguinte, do jeito que você exemplificou, o Flex vai rodar essa linha:
var arrAux: ArrayCollection = ArrayCollection(cbo.dataProvider);
Antes dessa:
if (evt.result != null) {
cbo.dataProvider = (evt.result as ArrayCollection);
}
Portanto, se eu entendi bem, para fazer o que você quer, a linha anterior deve ser colocada abaixo dessa dai, da seguinte maneira:
if (evt.result != null) {
cbo.dataProvider = (evt.result as ArrayCollection);
var arrAux: ArrayCollection = ArrayCollection(cbo.dataProvider);
}
Porque ai sim você terá a certeza que ela vai ser executada depois do carregamento do combo.
agosto 13th, 2009 at 10:23
Sadim,
Ë possível fazer o flex comunicar com duas uris diferentes ? Ora eu chamo um método de um projeto asp.net, ora de outro ?
Pq tenho uma aplicacao asp.net com flex que valida o login de um usuário e no flex eu capturo a classe do usuário com os seus respectivos dados. Agora eu não sei como fazer para retirar isto do swf e passar para minha aplicação corrente em asp.net para assim deixar na seção da aplicação principal
Agradeço a atenção
agosto 26th, 2009 at 00:02
Vinícius,
Antes de mais nada, parabéns pelo tutorial!
Mas, tentando executar todos os passos, ao rodar a aplicação (baixei o fonte que vc disponibilizou para verificar e está tudo correto), exibe o erro:
“Ocorreu o seguinte erro ao tentar executar o método:
faultCode:Client.Error.MessageSend faultString:’Send failed’ faultDetail:’Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: ‘http://localhost:50640/integracao/Negocio/Gateway.aspx””
O estranho é que este endereço acima está rodando perfeitamente (fica uma página em branco, como vc sugere no tutorial). O Flex é que não está conseguindo encontrá-lo…
Vc saberia me dizer pq isso ocorreu?
Abs!
outubro 2nd, 2009 at 17:06
Amigo, fiz todos os passos e ao final recebi o seguinte erro…
Ocorreu o seguinte erro ao tentar executar o método:
faultCode:Client.Error.MessageSend faultString:’Send failed’ faultDetail:’Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 500: url: ‘http://localhost:49683/Gateway.aspx”
Alguma idéia?
outubro 9th, 2009 at 13:45
Primeiramente gostaria de parabenizá-lo pelo artigo, que na minha opnião é um dos melhores sobre o assunto em português. Fiz o exemplo, e cheguei a implementar na minha classe c# o linq to sql para fazer a persistência dos dados, porém meu método insere retorna erro se eu coloco um ojeto do tipo da classe como parâmetro. exemplo: public string void insere(Pessoa obj){…}
se eu retirar o parâmetro e fizer um teste retornando uma string, funciona ok. O que poderia ser?
abril 24th, 2010 at 12:22
Testei e funcionou ok. Porém, estou com 2 problemas: 1. Não consigo popular um combo box com o resultado da Lista.
2. Tenho uma chave estrangeira, por exemplo Pessoa -> Tipo Pessoa. Seu exemplo não tem este caso e não consegui fazer aqui. Vc pode me ajudar dando um exemplo?
maio 25th, 2010 at 19:05
Vinicius, boa noite
Fiz os passos que você descreveu e em ambiente de desenvolvimento, funciona muito bem, mas não consigo publicar o projeto ou rodar em outra maquina que esteja com o IIS configurado… Estou executando pelo servidor do VS2008… preciso de um help;