none
Consumindo Web Service RRS feed

  • Pergunta

  • Bom dia! estou aprendendo como utilizar um web service diretamente com delphi porem ao consumir o web service o valor da função está vindo incoerente.

    Criei um Web Service no Visual Studio bem básico com as funções exemplo de retornar uma string e calcular um valor.

            [WebMethod]

            public string HelloWorld()

            {

                return "Hello World";

            }

     

            [WebMethod]

            public double Multiplica3(double ValorA)

            {

                return ValorA * 3;

            }

     

    Só que para Utilizar este Web Service eu estou utilizando o Delphi 7 com WSDL Importer.

    Ao passar a função no delphi "Servico.Multiplica3( ValorA )" sempre me retorna zero.

    Quando eu retorno a string HelloWorld funciona beleza.

     

    Outra coisa são os tipos de variáveis no C#( decimal e float ) são transformadas para ( TXSDecimal e Single ).

    as que permanecem igual são ( double e int );

    quarta-feira, 18 de janeiro de 2012 11:41

Todas as Respostas

  • Faça um pequeno teste:

    Mude o método para retornar uma string:
    public string Multiplica3(double ValorA)
    {
      double retorno = ValorA * 3;
      return retorno.ToString();
    }
    

    Se isto funcionar tudo indica que o problema é de tipo.

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 18 de janeiro de 2012 12:18
  • Fiz exatamente sua sugestão tambem não funcionou, talves o valor que está chegando ao "ValorA" está errado ai ele atribui zero.

    transformando tudo para string e convertendo no web service ocorre erro.

    quarta-feira, 18 de janeiro de 2012 12:35
  • Certo. Um segundo teste:

    public string Multiplica3(string ValorA)
    {
      double valor = double.Parse(ValorA);
      double retorno = valor * 3;
      
      return retorno.ToString();
    }
    



    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 18 de janeiro de 2012 12:38
  • Paulo como citei anteriormente tinha transformado tudu para string e ocasionava o erro, vou psotalo para vc enteder melhor

     

     

    System.FormatException: Seqüência de entrada não estava em um formato incorreto.
       em System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
       em System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
       em System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
       em System.Double.Parse(String s)
       em WebService1.IServico.Multiplica3(String ValorA) na C:\Documents and Settings\MSDAprendiz\Desktop\Web Services\WebService1\WebService1\IServico.asmx.cs:linha 29

     

    o Delphi interpreta a String do WebService como WideString
    quarta-feira, 18 de janeiro de 2012 12:49
  • Até o retorno no delphi você colocou como string? O problema ai é de tipos mesmo.

    Coloca um breakpoint no webservice e veja se o valor está chegando certo.

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 18 de janeiro de 2012 12:53
  • Como posso por breakpoint no webservice?

    Estou utilizando uma aplicação Delphi.exe com o endereço do meu Web Service que está no IIS.

     

     

    Utilizando breakpoints no Web Service  e executando através do Visual Studio eu consigo visualizar os valores, porem lá funciona com todas as conversões que agente testou anteriormente.

    quarta-feira, 18 de janeiro de 2012 13:03
  • Minha dica é para testar pelo visual studio mesmo.

    Como faça para usar o delphi na minha maquina? Quero simular isto aqui.

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 18 de janeiro de 2012 13:08
  • Sim, pelo visual studio funciona corretamente, passando direto  ou convertendo.

     

    Estou utilizando o Delphi 7

    http://www.degracaemaisgostoso.org/borland-delphi-7-enterprise-edition-serial-e-traducao-para-ptbr-2007.html

     

    Após instalar o Delphi crie o web service e publique no IIS.

    No Delphi

     

    Abra uma nova aplicação para gerar a aplicação cliente.  --> File New Aplication

    Adicione a referencia do Webservice com o WSDL. --> File New Other > WebServices > WSDL Importer > no caminho URL

    passe o endereço do Web Service 

    Exemplo: http://Localhost/WebService/Service1.asmx?WSDL , irá previsualizar a classe que vc vai importar e clicar em finish.

     

    Agora na interface do form criado anteriormente adicione um componente HTTPRIO da paleta WebServices

    configure o caminho WSDLLocation com a url digitada do WSDL, selecione o Service( Service1 ) e a Port( ServiceSoap )

    Adicione um botão e  um edit para testar a função.

     

    Declare  referencia com a unit gerada do WSDL apertando ALT +F11.

     

    no código do botão.

     

    procedure TfrmWebService.btnCalcularAsmxClick(Sender: TObject);

    var

      Servico: Service1Soap;

    begin

      Servico := HTTPRIO as  Service1Soap ;

      Label1.Caption := FloatToStr( Servico.Multiplica3( StrToFloat( edValorAsmx.Text ) ) );

    //  Label1.Caption := Servico.HelloWorld;

    end;

     

    este foi o meu primeiro teste.

     

     

     

    quarta-feira, 18 de janeiro de 2012 13:19
  • Olá,

    Alguma novidade quanto a essa dúvida?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 23 de janeiro de 2012 19:40
    Moderador
  • Ainda com problemas, 

     

    Na função do webservice devolvi um valor fixo e aceitou, meu problema é quando preciso passar parametros.

    sexta-feira, 27 de janeiro de 2012 18:30
  • Cara estou com um problema. Estou consumindo um webservice. Nele contem uma função que retorna uma string. Esta string tem em torna de 10.000 caractéres.

    Problema: Quando recebo a string ela vem '<><>'... e ao dar LoadFromXML  dá um erro 'Caractere inválido encontrado no texto.'#$D#$A#$D#$A'Line: 1'#$D#$A'<employees><employee><transp__SFT_Active'

    sexta-feira, 13 de julho de 2012 18:31
  • Procure passar o parâmetro do tipo string ou comum para os dois. 

    Qual é a equivalência do double .NET no Delphi? 

    A minha dica de webservce é sempre usar tipos genéricos para várias plataformas ou então utilizar classes específicas com get e set, assim você não tem erro.

    Entendeu?


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    quarta-feira, 18 de julho de 2012 16:45