Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Heming

WS Classes Autogeradas - Soap 1.2

Recommended Posts

Olá.

 

Estou trabalhando na instalação de um KB no ERP Dynamics AX (KB4086133 - NFe 4.0). Quanto a instalação do KB, já sabíamos que ele possuía alguns problemas quanto ao consumo do web service do Sefaz.

 

Problema inicial

 

Quando a Microsoft iniciou o desenvolvimento da implementação, o Sefaz utilizava o name do serviço como "NfeAutorizacao4" (este é apenas um dos serviços). Segue o WSDL da parte que interessa:

<wsdl:service name="NfeAutorizacao4">
    <wsdl:port name="NfeAutorizacao4Soap" binding="tns:NfeAutorizacao4Soap">
        <soap:address location="https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao4.asmx" />
    </wsdl:port>
    <wsdl:port name="NfeAutorizacao4Soap12" binding="tns:NfeAutorizacao4Soap12">
        <soap12:address location="https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao4.asmx" />
    </wsdl:port>
</wsdl:service>

Após a liberação do KB, o governo realizou algumas mudanças na nomenclatura e alterou o nome do serviço para "NFeAutorizacao4" (alterando o F para maiúsculo). O que está ok, lembrando que isto tudo é dentro do prazo de homologação. O novo WSDL está da seguinte forma:

<wsdl:service name="NFeAutorizacao4">
    <wsdl:port name="NFeAutorizacao4Soap" binding="tns:NFeAutorizacao4Soap">
        <soap:address location="https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx" />
    </wsdl:port>
    <wsdl:port name="NFeAutorizacao4Soap12" binding="tns:NFeAutorizacao4Soap12">
        <soap12:address location="https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx" />
    </wsdl:port>
</wsdl:service>

 

Como a MS não está com previsão na liberação de um novo KB (até o presente momento) e somos um dos primeiros a realizar a atualização (visto que é apenas Brasil), optamos por corrigir por nós mesmo os problemas e, caso em algum futuro próximo a MS lance a correção, instalá-la. E isso tudo ocorreu perfeitamente, pois, temos acesso ao projeto VS dentro do ERP para customização.

 

O que realmente está pegando, é um efeito colateral da custom que não estou conseguindo localizar alguém que tenha tido um problema similar. Todas as classes geradas, que vieram pelo KB, utilizam o sufixo "Soap12Client". Quando fizemos a correção e geramos novamente as classes, esse sufixo foi alterado apenas "SoapClient". Ou seja, a classe autogerada de serviço, que era esta:

public partial class NFeAutorizacao4Soap12Client

passou para:

public partial class NFeAutorizacao4SoapClient

O que, do ponto de vista de programação, não há nenhum problema.

 

Entretanto, o Dynamics AX acaba utilizando esse sufixo para todas as chamadas de todos os serviços da NFe (existe um método que retorna o sufixo como "Soap12) e, quando mudado o sufixo para um serviço, muda para os demais serviços da NFe 4.0. Neste caso, são inúmeros endereços, como pode ser visto no link abaixo:

http://hom.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=

 

Devido a este problema de sufixo, a customização se torna ainda maior, pois, seria necessário customizar em outros pontos do sistema.

 

Como no WSDL há duas port's para o serviço (NFeAutorizacao4Soap e NFeAutorizacao4Soap12), a pergunta é a seguinte:

Há como definir que as classes autogeradas sejam da versão 1.2 e/ou possuam o sufixo "Soap12"?

 

Sei que eu posso alterar as classes auto geradas para que possuam o prefixo. Entretanto, quero saber como realizar esse procedimento de forma automática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • Por marcelo.ourico
      Boa noite. Pessoal, mais uma vez aqui pedindo uma ajuda.

      Estou tentando enviar uma NFSe via SOAP.

      Estou recebendo o seguinte erro:

      Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] ERRO : cvc-complex-type.4: Attribute 'Algorithm' must appear on element 'ns2:CanonicalizationMethod'. in

      O meu Array está da seguinte forma:
      Array
      (
      [CanonicalizationMethod] => Array
      (
      [@attributes] => Array
      (
      [Algorithm] => http://www.w3.org/TR/2001/REC-xml-c14n-20010315
      )
      )

      Não entendi o porque desse erro, alguém sabe ajudar?
    • Por Rafael Massula
      Boa noite pessoal, 
      Tenho o seguinte código em .Net que faz a comparação de uma senha que foi criptografada e salva no banco com a senha comum que o usuário conhece. O algoritmo que desenvolvi foi esse da image.png porem preciso converter essa verificação para JavaScript pela seguinte necessidade, será uma aplicação em electron e ela poderá funcionar offline então não terei como mandar a verificação para o servidor. Existe alguma possibilidade? Desde já agradeço. 

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.