CONSUMIR WEBSERVICES

CLAUDIOCIPRIANO 04/01/2017 11:21:09
#470318

Olá a todos,

Semana passada abri um tópico sobre o Bloco X do PAF-ECF, como não teve nenhuma resposta eu o encerrei.
Estou abrindo este pra ver se consigo ajuda, que vai ser útil pro meu problema no PAF-ECF.
é o seguinte:
Eu gero dois arquivos em xml, assino e depois preciso enviar um webservice e pegar o retorno, dois desses processos já faço, que é gerar e assinar os arquivos, tá faltando enviar pro webservice e pegar o retorno.
Eu nunca trabalhei com webservice, a minha NFe eu uso uma dll de terceiros,
Consegui fazer a assinatura com um exemplo da NFe em C# que baixei da net, alterei a rotina, adaptando pros arquivos que gero, compilei como dll e uso no VB6, mas não consigo fazer as outras adaptações, por causa da minha falta de conhecimento.

webservice : http://webservices.sathomologa.sef.sc.gov.br/wsDfeSiv/Recepcao.asmx
Servico:= [ô]http://tempuri.org/[ô]
SoapAction := [ô]http://tempuri.org/EnviarReducaoZ[ô]

O parametro para envio:
CNPJ+DataReferencia+XMLZipado

Eu programo em VB6, mas se tiver um exemplo em C#, posso transformar em dll.
Alguem sabe se o SOAP Toolkit pode fazer isto no Vb6?


Agradeço pela atenção.

KERPLUNK 04/01/2017 13:13:00
#470327
Resposta escolhida
Porque essa insistência em continuar usando o VB6?
CLAUDIOCIPRIANO 04/01/2017 13:33:49
#470329
Porque nosso software é muito complexo, estamos mudando aos poucos para C#, como precisamos homologar o PAF urgente, pois, o que usamos hoje, está vencido, alterar o que tá feito em VB6 é menos trabalhoso para nós, pois somos apenas dois programadores e nossos conhecimentos em C# ainda é, digamos, amador (kkkkkkk).
KERPLUNK 04/01/2017 13:52:49
#470332
é que o que você quer fazer, é mais trabalhoso que converter um sistema inteiro. Um sistema de porte médio(uns 100 formulários mais ou menos), pode ser refeito em duas semanas. Já isso que você quer fazer, pode demorar mais que isso, devido à quantidade de erros que podem gerar.
KERPLUNK 04/01/2017 13:53:17
#470333
é que o que você quer fazer, é mais trabalhoso que converter um sistema inteiro. Um sistema de porte médio(uns 100 formulários mais ou menos), pode ser refeito em duas semanas. Já isso que você quer fazer, pode demorar mais que isso, devido à quantidade de erros que podem gerar.
KERPLUNK 04/01/2017 13:59:16
#470334
Mas enfim, se o que você quer é algo híbrido assim, o que eu faria:
1 - A aplicação que envia os XML possui um FileWatcher. Então ficaria monitorando uma pasta o tempo todo. Para isso a aplicação ficaria aberta o tempo todo. Assim que um arquivo é criado nessa pasta se inicia o processo de envio e assim que pronto, copia o arquivo enviado para uma outra pasta.
2 - Gerar o XML e assinar e colocar na pasta em que a aplicação que envia está monitorando como você já está fazendo.

A aplicação que envia, fica [Ô]invisível[Ô], talvez um ícone na barra de tarefas, só pra ver que ela está rodando.
CLAUDIOCIPRIANO 04/01/2017 14:12:33
#470335
Não quero nenhuma aplicação, basta um código de exemplo, como seria para enviar o arquivo zipado, no caso teria que informar em bytes, para o webservice abaixo, conforme mostro na abertura do tópico,
webservice : http://webservices.sathomologa.sef.sc.gov.br/wsDfeSiv/Recepcao.asmx

KERPLUNK 04/01/2017 14:17:59
#470337
Aí é que está o problema. Você está imaginando um webservice mais ou menos como um FTP, e não é assim que funciona. Tenho um vídeo mostrando como isso é feito.
CLAUDIOCIPRIANO 04/01/2017 14:29:23
#470340
Não estou imaginando isso não, eu já tinha visto o seu vídeo e foi através dele que eu aprendi adicionar o webservice, que menciono no início do tópico, no projeto que estou tentando desenvolver, e é aí que estou me enrolando, não estou conseguindo enviar o arquivo zipado para o webservice.

KERPLUNK 04/01/2017 14:46:23
#470341
Bem, em primeiro lugar, quem quer que tenha construído aquele webservice deveria ser enforcado. Eu suponho que o que você tenha que fazer é adicionar o arquivo zipado como Base64 no parâmetro. WebService não foi feito para envio de arquivos, mas sim de dados em formato XML. Converter um arquivo para Base64 é bem simples:

public static string EncodeToBase64(string zipPath)
{
using (FileStream fs = new FileStream(zipPath, FileMode.Open, FileAccess.Read))
{
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
return Convert.ToBase64String(filebytes);
}
}

Esse método recebe o caminho de um arquivo(que não precisa ser necessariamente um zip) e converte para uma string Base64. Criar o arquivo Zip em si é também bastante simples como visto na documentação. Então o que vai ser feito:
1 - Criar o XML e assinar(que você já tem pronto)
2 - Criar o arquivo ZIP do XML assinado
3 - Consumir o WebService, lendo o arquivo zipado como Base64 e colocando o conteúdo dessa string no parâmetro apropriado do método do webservice
KERPLUNK 04/01/2017 14:55:13
#470344
Acabei de confirmar olhando o WSDL do serviço e sim, o arquivo zipado é enviado como Base64
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas