none
Retorno Web Service RRS feed

  • 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!

    quarta-feira, 17 de novembro de 2010 18:39

Respostas

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)
    quarta-feira, 17 de novembro de 2010 18:51
  • 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)
    quarta-feira, 17 de novembro de 2010 18:53
  • 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?

     

    quinta-feira, 18 de novembro de 2010 10:52
  • 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)
    quinta-feira, 18 de novembro de 2010 11:08
  • 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...

    quinta-feira, 18 de novembro de 2010 13:14
  • 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)
    quinta-feira, 18 de novembro de 2010 13:17
  • 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!

    quinta-feira, 18 de novembro de 2010 13:28
  • 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?

    quinta-feira, 18 de novembro de 2010 13:44
  • 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)
    quinta-feira, 18 de novembro de 2010 15:03