Problemas entre webservices do PR e NF-e do Ax – Parte 1

Ajudei um parceiro semana passada em alguns problemas que ele estava tendo para colocar a NF-e do Ax funcionando com os web services do PR e gostaria de compartilhar o workaround que encontramos para os problemas identificados.

O problema:

A SEFAZ/PR implementou o WSDL dos webservices Consulta da Nf-e, Cancelamento, Recepção, Retorno do processamento do Lote e Inutilização de uma maneira diferente da SEFAZ/SP e SEFAZ/RS.

Essa diferença faz com que o Ax ou não consiga gerar os service references para esses web services ou quando o service reference é gerado, o WSDL faz com que o .net gere a classe que implementa o client SOAP com um nome diferente do esperado pela implementação da Nf-e, por exemplo, o Ax espera encontrar a classe NfeRetRecepcaoSoapClient e o wsdl faz o .net gerar uma classe chamada NfeRetRecepcaoClient.

Work around:

Baixe o WSDL do site da SEFAZ/RS, descompacte em um diretório, verifique se o usuário do AOS tem acesso de leitura a esse diretório, atribua o acesso de leitura ao diretório caso ele não tenha.

Para cada web service, ao invés de usar a URL do SEFAZ/PR utilize o caminho para o diretório do disco.

image

No exemplo acima, é possível ver que o webservice de cancelamento foi gerado a partir do WSDL do disco com sucesso (screenshot do form de parâmetros brasileiros, versão RU5). Faça isso para cada um dos 4 webservices restantes.

Após gerar os webservices, além de configurar os service references para usar o certificado digital (disponibilizei uma classe que faz isso automaticamente aqui), é necessário trocar o endereço do endpoint do client soap da SEFAZ/RS para a SEFAZ/PR.

Para isso, acesse a configuração do service reference através de:

  • \Basic\Setp\Application Integration Framework\Service References
  • ou diretamente do AOT\References

image

No campo indicado acima, para cada service reference, substitua a URL pela URL correspondente da SEFAZ/PR.

Após esse procedimento, o Ax consegue conectar nos webservices do PR sem problemas, contudo, a SEFAZ/PR também não seguiu alguns padrões do XML definidos pela W3C. Ainda precisamos fazer um pequeno ajuste em 4 classes que geram o XML para que tudo funcione normalmente, porém, esses ajustes continuam na parte 2.

Fiquem ligados!

#1 Leandro Menezes on 7.06.2010 at 1:36 PM

O WS do AM também não é no mesmo padrão do de SP. Ele é feito em Apache AXIS. Os ws no site do sefaz são: nfe.sefaz.am.gov.br/.../NfeRecepcao https://nfe.sefaz.am.gov.br/ws/services/NfeRetRecepcao

nfe.sefaz.am.gov.br/.../NfeCancelamento nfe.sefaz.am.gov.br/.../NfeInutilizacao nfe.sefaz.am.gov.br/.../NfeConsulta nfe.sefaz.am.gov.br/.../NfeStatusServic

para conseguir gerar a dll simplesmente adicione "?wsdl" no final da url, ou seja: nfe.sefaz.am.gov.br/.../NfeRecepcao viraria: nfe.sefaz.am.gov.br/.../NfeRecepcao

talvez o mesmo aconteca no WS do PR.

Outro detalhe interessante no WS de AM é que o nome do client gerado pela dll e o endpoint não tem a palavra "SOAP" no nome, então é necessario editar/customizar a classe que da o nome aos objetos (EFDocWebServiceData_BR - metodo assemblyClassName e endingPointConfigurationName, neste ultimo caso modificando o nome do endpoint no xml de configuração já resolveria.).