Usuário com melhor resposta
Retorno Web Service

Pergunta
-
Srs.,
Tenho um web service que me retorna uma string. Então, quando eu chamo este web service jogo seu retorno em uma string. Fiz assim:
localhostTeste.Service1 wservico = new localhostTeste.Service1();
string teste = wservico.RetornoDadosPF();
Agora seguinte, suponhamos q este web service vai me retornar um conjunto de dados (CPF, Nome, Idade, Sexo, Endereço, Telefone, Celular e alguns mais). Como vou pegar estes dados? Minha variável "teste" vai ser de q tipo?
Desde já agradeço!
Respostas
-
Rafael,
No caso, você deve declarar uma classe com os dados que você quer retornar, tipo:
public class MyClass { public string CPF {get;set;} public string Nome {get;set;} } // chama o servico... localhostTeste.Service1 wservico = new localhostTeste.Service1(); MyClass teste = wservico.RetornoDadosPF();
Você deve alterar a sua interface e o seu serviço para retornar esta classe. Outra coisa, para não ter problemas, declare esta classe no mesmo projeto que tem a interface.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Rafael Teixeira I Silva quinta-feira, 18 de novembro de 2010 13:32
-
Além disto, se o seu web service for WCF, você tem que colocar o atributo DataContract na classe e DataMember nas proprieades, tipo:
[DataContract] public class MyClass { [DataMember] public string CPF {get;set;} [DataMember] public string Nome {get;set;} }
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Rafael Teixeira I Silva quinta-feira, 18 de novembro de 2010 13:32
Todas as Respostas
-
Rafael,
No caso, você deve declarar uma classe com os dados que você quer retornar, tipo:
public class MyClass { public string CPF {get;set;} public string Nome {get;set;} } // chama o servico... localhostTeste.Service1 wservico = new localhostTeste.Service1(); MyClass teste = wservico.RetornoDadosPF();
Você deve alterar a sua interface e o seu serviço para retornar esta classe. Outra coisa, para não ter problemas, declare esta classe no mesmo projeto que tem a interface.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Rafael Teixeira I Silva quinta-feira, 18 de novembro de 2010 13:32
-
Além disto, se o seu web service for WCF, você tem que colocar o atributo DataContract na classe e DataMember nas proprieades, tipo:
[DataContract] public class MyClass { [DataMember] public string CPF {get;set;} [DataMember] public string Nome {get;set;} }
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Rafael Teixeira I Silva quinta-feira, 18 de novembro de 2010 13:32
-
Rogério, blz cara, até aí ficou claro... Agora seguinte, como será meu webmethod para retornar mais de um valor. Por exemplo:
[
WebMethod]
public string RetornoDadosPF()
{
string CPF = "068120106-18";
return CPF;
}
Neste webmethod, eu retorno apenas uma string. E se eu precisar que este webmethod retorne mais de um valor (CPF, Nome, Idade, Sexo, Endereço, Telefone, Celular e alguns mais)? Como faço?
-
Pois então, ao invés de retornar o string, você vai retornar a classe, tipo:
[WebMethod] public MyClass RetornoDadosPF() { MyClass result = new MyClass(); result.CPF = "068120106-18"; result.Nome = "Meu Nome"; return result; }
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
Rogério, aacho q estou quase lá, mas ainda tenho um pequeno problema
Tenho no meu webservice a classe
public class PessoaFisica
{
public string CPF {get; set; }
public string Nome { get; set; }
}e tenho este web method
[WebMethod]
public PessoaFisica retornaDadosPessoaFisica(){
PessoaFisica retornaDadosPF = new PessoaFisica();
retornaDadosPF.CPF = "000.000.000-00";
retornaDadosPF.Nome = "Rafael";
return retornaDadosPF;
}Em minha aplicação (Web), adicionei a referência do webservice e criei a mesma classe
public class PessoaFisica
{
public string CPF { get; set; }
public string Nome { get; set; }
}Chamo o webservice sem problemas
ServicoPessoaFisica.Service1 ServicePessoaFisica = new ServicoPessoaFisica.Service1();
Agora quando vou chamar o método (retornaDadosPessoaFisica) do meu webservice, se eu jogo o retorno numa variável do tipo "VAR" funciona sem problemas
var teste = ServicePessoaFisica.retornaDadosPessoaFisica();
Mas se eu crio um objeto do tipo PessoaFisica da erro
PessoaFisica recuperaDados = new PessoaFisica();recuperaDados = ServicePessoaFisica.retornaDadosPessoaFisica();
ERRO: cannot implicitly convert type 'RelatorioCPF_CNPJViaInfoConv.ServicoPessoaFisica' to 'RelatorioCPF_CNPJViaInfoConv.ServicoPessoaFisica'Sei q to fazendo alguma coisa errada, se puder dar mais uma força...
-
Rafael,
O ideal é você ter uma DLL com todas as suas classes de Interface, esta DLL será usada tanto para o Client, quanto para o Web Service. E quando você for criar o proxy do client, você tem uma opção em Advanced, Reuse types in referenced Assembly, você deve marcar esta opção.
Isto deve resolver o seu problema.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
Consegui!
inclui uma using referenciando meu webservice no projeto
using
RelatorioCPF_CNPJViaInfoConv.ServicoPessoaFisica;
e tirei a classe q tinha no projeto.
na hora q instanciei
PessoaFisica
recuperaDados = new PessoaFisica();
foi do tipo do webservice!
Valeu rogério!
-
Rogério, outra dúvida!
Desta forma, eu peguei os dados de um webservice que eu criei, quer dizer sabia o "formato" do retorno.
Agora e se eu for trabalhar com um webservice de uma empresa X, quer dizer, eu n sei como isto está sendo retornado...
Como fazer?
-
Rafael,
Se o Web Service estiver conforme os padrões, quando você cria o proxy client do Web Service, o próprio Visual Studio já irá criar todas as classes necessárias para a comunicação. Isto porque todo Web Service é descrito por um WSDL que ele usa para gerar estas classes. O .NET já cria este WSDL automaticamente para você quando você cria um webservice usando ASP.NET ou WCF.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)