Usuário com melhor resposta
Consumir WebService que Retorna uma String

Pergunta
-
Pessoal, estou precisando consumir no C# .Net um WebService que retorna uma String.
Alguem poderia me passar um exemplo?
Abaixo segue o WebService que eu quero consumir:
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://www.blablablabla.com"> <NewDataSet> <Cliente> <Column1>76768768686876</Column1> <Codigo>400</Codigo> <id>636363</id> <Nome>Joao da Silva</Nome> </Cliente> </NewDataSet></string>
Respostas
-
Oi !
Primeiramente, você está chamando seu webService duas vezes, na linha que atribui o datasource e na linha anterior, isso é ruim em termos de comunicação de rede.
Segundo, webService não transmite formatação, mas dados. Se o tipo de retorno deste webService é string, então está me parecendo que fizeram uma pegadinha com você. Quem criou este webService, ao invés de devolver um dataset (porque tinha em mãos um dataset!) fez um getxml no dataset e devolveu apenas o xml do dataset na forma de uma string única.
Faça o seguinte :
Code SnippetDataSet ds=new DataSet();
string s=wservico.getcliente(txtcodigo.Text);
System.IO.MemoryStream m=new System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(s));
ds.readxml(m);
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataBind();
Acredito que vai funcionar sem problemas, confira.
[]'s
Todas as Respostas
-
Oi !
Pelo Visual Studio, faça uma webReference para o endereço deste webService (.asmx se foi criado em .NET ou WSDL se não foi).
Você pode fazer a webReference clicando com o botão direito no projeto e pedindo "Add web reference". Na própria janela de webReference é perguntado qual nome você dará ao namespace deste webService. O nome escolhido por você vira um namespace e dentro você encontrará as classes disponibilizadas pelo webService.
Faça new em uma das classes e utilize seus métodos, como se fosse uma classe local.
[]'s
-
O problema nao é esse.
Eu ate consigo consumi-lo, listando no DataGrid mais nao vem formatado.
Quando eu consumo um WS que retorna um DataSet eu consigo listar tudin no DataGrid cada campo no seu lugar.
Estou fazendo assim:
webservice.servico wservico = new webservice.servico();
wservico.getcliente(txtcodigo.Text);
DataGrid1.DataSource = wservico.getcliente(txtcodigo.Text);
DataGrid1.DataBind();
Sendo que assim ele me traz sem a formatação.
Acho que tenho que fazer antes o tratamento da String XML.
Ai que esta o problema.
-
Oi !
Primeiramente, você está chamando seu webService duas vezes, na linha que atribui o datasource e na linha anterior, isso é ruim em termos de comunicação de rede.
Segundo, webService não transmite formatação, mas dados. Se o tipo de retorno deste webService é string, então está me parecendo que fizeram uma pegadinha com você. Quem criou este webService, ao invés de devolver um dataset (porque tinha em mãos um dataset!) fez um getxml no dataset e devolveu apenas o xml do dataset na forma de uma string única.
Faça o seguinte :
Code SnippetDataSet ds=new DataSet();
string s=wservico.getcliente(txtcodigo.Text);
System.IO.MemoryStream m=new System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(s));
ds.readxml(m);
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataBind();
Acredito que vai funcionar sem problemas, confira.
[]'s
-
Dennes, exatamente o ws estava fazendo um getxml (eu sabia) nao era pegadinha.
Esse ws foi feito usando o VB .NEt e o Delphi 6 nao estava conseguindo consumir ele como DataSet, por isso tivemos que da um getxml.
Como estava dando uns problemas no Delphi decidi comsumi-lo usando o C# .NET para testar.
Valeu pela força, deu certin desse modo.
Abraço