CONSUMIR WEBSERVICES
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.
Porque essa insistência em continuar usando o VB6?
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).
é 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.
é 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.
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.
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.
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
webservice : http://webservices.sathomologa.sef.sc.gov.br/wsDfeSiv/Recepcao.asmx
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.
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.
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:
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
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
Acabei de confirmar olhando o WSDL do serviço e sim, o arquivo zipado é enviado como Base64
Tópico encerrado , respostas não são mais permitidas