Inquiridor
Consumindo Web Service

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 );
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. -
-
-
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
- Editado Ricardo Fochesatto quarta-feira, 18 de janeiro de 2012 12:50
-
-
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.
-
-
Sim, pelo visual studio funciona corretamente, passando direto ou convertendo.
Estou utilizando o Delphi 7
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.
-
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 -
-
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'
-
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