CONSUMIR WEB SERVICE
Pessoal estou procurando um exemplo prático de consumo de web service da nfe ou cte, alguém poderia me passar um exemplo enxuto sem uso de classes, apenas declarações de variáveis e passagem de parâmetros ? ( se assim for possÃvel).
Vou te passar um vÃdeo que fiz explicando exatamente sobre isso. Mas por favor, assista o vÃdeo e entenda a explicação, caso tiver dúvidas pergunte. Essa estratégia de simplesmente baixar código fonte, nunca vai te trazer benefÃcios reais. O vÃdeo é este
Eu ja tinha visto esse seu video, achei muito bom realmente. No caso de nfe ou cte, preciso adicionar/referenciar todos os endereços de web-services ?, tanto homologação como produção ?, a idéia que eu tinha, era deixar esses endereços no BD e passar como parâmetros, ao chamar cada serviço, não daria certo ?
Acho que daria certo sim, mas com alguns [Ô]remendos[Ô] provavelmente. é muito possÃvel que a conexão para homologação, não seja com certificado digital como seria em produção. Se não for esse o caso, então basta alterar a propriedade [Ô]Url[Ô] do objeto da referência e pronto. Desde que o WSDL seja EXATAMENTE o mesmo, você não terá nenhum problema.
Em homologação é com certificado também. Seguindo seu exemplo, eu ja adicionei aqui um endereço, que seria do status do serviço, vou tentar chamar o serviço passando os parâmetros necessários ( vou fazer isso amanhã, agradeço pela dica.)..
Amigos, depois de quebrar muito a cuca, consegui consumir meu primeiro web-service, dando um stop no final da rotina vi que retornou o xml com os dados corretos, agora, como faço para pegar as tags retornadas na rotina abaixo ?
Dim consulta As New stctehomo.CteStatusServico
selecionarcertificado()
Dim CERT As X509Certificate2
CERT = meuCertificado
consulta.ClientCertificates.Add(CERT)
Dim cabec As New stctehomo.cteCabecMsg
cabec.cUF = [Ô]35[Ô]
cabec.versaoDados = [Ô]2.00[Ô]
consulta.cteCabecMsgValue = cabec
Dim dados As String = [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]UTF-8[Ô][Ô]?>[Ô] & _
[Ô]<consStatServCte xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/cte[Ô][Ô] [Ô] & _
[Ô]versao=[Ô][Ô]2.00[Ô][Ô]>[Ô] & _
[Ô]<tpAmb>2</tpAmb>[Ô] & _
[Ô]<xServ>STATUS</xServ>[Ô] & _
[Ô]</consStatServCte>[Ô]
Dim cteDados As New XmlDocument
cteDados.LoadXml(dados)
Dim retorno As XmlElement = consulta.cteStatusServicoCT(cteDados)
Agora preciso ler o retorno para as tomadas de decisão...
Dim consulta As New stctehomo.CteStatusServico
selecionarcertificado()
Dim CERT As X509Certificate2
CERT = meuCertificado
consulta.ClientCertificates.Add(CERT)
Dim cabec As New stctehomo.cteCabecMsg
cabec.cUF = [Ô]35[Ô]
cabec.versaoDados = [Ô]2.00[Ô]
consulta.cteCabecMsgValue = cabec
Dim dados As String = [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]UTF-8[Ô][Ô]?>[Ô] & _
[Ô]<consStatServCte xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/cte[Ô][Ô] [Ô] & _
[Ô]versao=[Ô][Ô]2.00[Ô][Ô]>[Ô] & _
[Ô]<tpAmb>2</tpAmb>[Ô] & _
[Ô]<xServ>STATUS</xServ>[Ô] & _
[Ô]</consStatServCte>[Ô]
Dim cteDados As New XmlDocument
cteDados.LoadXml(dados)
Dim retorno As XmlElement = consulta.cteStatusServicoCT(cteDados)
Agora preciso ler o retorno para as tomadas de decisão...
Pegue o retorno, gere classes e desserialize. Não tem porque usar XmlDocument. Ele é mais difÃcil de se trabalhar do que com as classes especializadas.
é o que estou pretendendo fazer, mas não achei como.. Exemplo?
Sem mistério, veja aqui. O caso é que você ainda não entendeu essa relação de string=dados. Você ainda enxerga XML como um string, ou no máximo um documento XML. Tente entender que XML e JSON são apenas maneiras de representar dados(classes/objetos) em formato de texto. Pegue qualquer objeto real como exemplo, uma caneta por exemplo e faça uma lista de suas caracterÃsticas(propriedades):
- X centÃmetros de comprimento
- X gramas de peso
- Cor da tinta X
- Marca X
Então transforme isso em uma classe:
propriedade do tipo inteiro Comprimento
propriedade do tipo inteiro Peso
propriedade do tipo string Cor
propriedade do tipo string Marca
E simplesmente faça o código correspondente:
Com essa classe, você pode criar uma [Ô]cópia[Ô] de qualquer caneta:
E assim para qualquer outra caneta que você queira.
Quando você serializar essa instância objeto [Ô]can[Ô] que é do tipo [Ô]Caneta[Ô] para um XML você vai ter algo como:
Observe que todas as propriedades do tipo de objeto(Caneta) estão listados com seus respectivos valores em tags correspondentes à s suas propriedades. é apenas uma forma de representar uma mesma instância de objeto em formato texto. Esses dados em formato texto, possuem todas as propriedades exatamente iguais ao objeto(Caneta) e por isso podem ser intercabiáveis, de texto para instância, de instância para texto livremente. Esse texto, pode ser repassado por um webService. Para isso, o webservice possui um método que retorna um objeto em formato texto(XML ou JSON) e esse texto pode ser intercambiável para um objeto na sua aplicação. Isso acontece, porque o webservice, como o próprio nome diz, é Web e por isso, não pode repassar dados binários(uma classe já instanciada). Por isso internamente ele transforma essa classe instanciada em um texto, descrevendo todo o objeto e valores em cada uma das propriedades. Esse texto então pode ser repassado via web, para qualquer aplicação(que convencionalmente chamamos client), que por sua vez, vai pegar esse texto e converter novamente para uma instância de objeto. Assim, tanto no servidor(o webservice) quanto no client(quem está consumindo, ou seja, você), possuem uma instância de classe exatamente igual, tanto em estrutura quanto em valores.
Essa é uma explicação simples e rudimentar, mas serve bem para entender isso tudo ou pelo menos para se ter uma idéia. E esse paradigma de texto -> dados, é muito, mas muito difÃcil de ser entendido. Mas depois de entendido bem, você não terá nenhuma dificuldade.
- X centÃmetros de comprimento
- X gramas de peso
- Cor da tinta X
- Marca X
Então transforme isso em uma classe:
propriedade do tipo inteiro Comprimento
propriedade do tipo inteiro Peso
propriedade do tipo string Cor
propriedade do tipo string Marca
E simplesmente faça o código correspondente:
public class Caneta
{
public int Comprimento {get; set;}
public int Peso {get; set;}
public string Cor {get; set;}
public string Marca { get; set; }
}
Com essa classe, você pode criar uma [Ô]cópia[Ô] de qualquer caneta:
Caneta can = new Caneta();
can.Comprimento = 10;
can.Peso = 5;
can.Cor = [Ô]Azul[Ô];
can.Marca = [Ô]BIC[Ô];
E assim para qualquer outra caneta que você queira.
Quando você serializar essa instância objeto [Ô]can[Ô] que é do tipo [Ô]Caneta[Ô] para um XML você vai ter algo como:
<Caneta>
<Comprimento>10</Comprimento>
<Peso>5</Peso>
<Cor>Azul</Cor>
<Marca>BIC</Marca>
</Caneta>
Observe que todas as propriedades do tipo de objeto(Caneta) estão listados com seus respectivos valores em tags correspondentes à s suas propriedades. é apenas uma forma de representar uma mesma instância de objeto em formato texto. Esses dados em formato texto, possuem todas as propriedades exatamente iguais ao objeto(Caneta) e por isso podem ser intercabiáveis, de texto para instância, de instância para texto livremente. Esse texto, pode ser repassado por um webService. Para isso, o webservice possui um método que retorna um objeto em formato texto(XML ou JSON) e esse texto pode ser intercambiável para um objeto na sua aplicação. Isso acontece, porque o webservice, como o próprio nome diz, é Web e por isso, não pode repassar dados binários(uma classe já instanciada). Por isso internamente ele transforma essa classe instanciada em um texto, descrevendo todo o objeto e valores em cada uma das propriedades. Esse texto então pode ser repassado via web, para qualquer aplicação(que convencionalmente chamamos client), que por sua vez, vai pegar esse texto e converter novamente para uma instância de objeto. Assim, tanto no servidor(o webservice) quanto no client(quem está consumindo, ou seja, você), possuem uma instância de classe exatamente igual, tanto em estrutura quanto em valores.
Essa é uma explicação simples e rudimentar, mas serve bem para entender isso tudo ou pelo menos para se ter uma idéia. E esse paradigma de texto -> dados, é muito, mas muito difÃcil de ser entendido. Mas depois de entendido bem, você não terá nenhuma dificuldade.
Essa explicação acima, é uma das bases para entendimento. Esse tipo de coisa é muito mais importante que simplesmente ver código. Esse é o maior problema, de longe, para muitos programadores. Não ter esta base de entendimento, jamais vai fazer você desenvolver código por si só e por isso precisa sempre de um exemplo, mostrando código. Então você até consegue adaptar alguma coisa mas vai ficar sempre sem entender bem o que fez e qualquer coisa que fuja desse padrão, vai ser um enorme obstáculo para você, necessitando novamente ficar buscando código de exemplo e patinando num ciclo infinito de pega código, altera aqui e ali e pronto.
Tente atentar mais para essas bases teóricas que mostram o funcionamento das coisas e você nunca mais vai precisar ver um código de exemplo e vai conseguir desenvolver sem nem sequer conhecer linguagem, tanto faz VB.NET, C#, Java, Perl, Ruby ou qualquer outra, com os entendimentos das bases teóricas, nada mais será mistério e nem vai te intimidar.
E por favor, tente não ver isso como uma crÃtica, mas algo que estou tentando te ajudar para que você possa evoluir profissionalmente, o que com certeza é sempre bom.
Tente atentar mais para essas bases teóricas que mostram o funcionamento das coisas e você nunca mais vai precisar ver um código de exemplo e vai conseguir desenvolver sem nem sequer conhecer linguagem, tanto faz VB.NET, C#, Java, Perl, Ruby ou qualquer outra, com os entendimentos das bases teóricas, nada mais será mistério e nem vai te intimidar.
E por favor, tente não ver isso como uma crÃtica, mas algo que estou tentando te ajudar para que você possa evoluir profissionalmente, o que com certeza é sempre bom.
E acrescentando, se seu webservice é SOAP ele certamente foi referenciado em sua aplicação como referência Web, isso automaticamente cria todas as classes que o WebService retorna e isso exime até mesmo da necessidade de criar uma classe para desserializar esse XML, pois com certeza, você já possui a classe que o método do webservice retorna na sua aplicação, basta usá-la. Todo webservice SOAP possui uma WSDL, que quer dizer Web Service Description Language, que é basicamente um XML que contém todos os métodos e objetos do WebService e ao referenciá-lo na sua aplicação, já são criadas todas as classes, métodos e tudo mais que o WebService disponibilize ou use.
Tópico encerrado , respostas não são mais permitidas