none
NFe 2.0 - Binding (erro: SOAP header Action was not understood) RRS feed

  • Pergunta

  • Bom dia.

     

    Estou migrando a NFe para a versão 2.0. O arquivo XML validou corretamente, sem problemas. A questão é o padrão SOAP que mudou para 1.2 e o binding da minha aplicação usava BasicHttpBinding (SOAP 1.1). Após alguns estudos verifiquei que uma opção é o WSHttpBinding porém não estou conseguindo acertar a configuração das propriedades para deixar ele redondo para consultar o Web Service da NFe 2.0 utilizando certificado.

     

    No momento está dando a seguinte mensagem de erro: SOAP header Action was not understood.

     

    Havia feito algo bem básio, assim:

     

    Alguém tem um método com este binding bem configurado que está rodando legal?

    Obrigado

    WSHttpBinding objWSHttpBinding = new WSHttpBinding(SecurityMode.Transport);
    objWSHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
    objNfeStatusServicoSoapClient = new NfeStatusServico2Soap12Client(objWSHttpBinding, new EndpointAddress("https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx"));
    objNfeStatusServicoSoapClient.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(objParametrosNfe.CertificadoPath, objParametrosNfe.CertificadoSenha);
    

     


    Drausio Henrique Chiarotti
    quarta-feira, 16 de março de 2011 12:21

Respostas

  • Boa tarde, Drausio.

    O erro neste caso é referente ao modo de segurança que é utilizado para conectar-se ao WebService. O modo correto à se utilizar é o TransportWithMessageCredential.

    Também sugiro a criação de um binding customizado para acessar o WebService da NFe. Segue abaixo exemplo:

                    HttpsTransportBindingElement objHttpsTransportBindingElement = new HttpsTransportBindingElement();

                    objHttpsTransportBindingElement.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;

                    objHttpsTransportBindingElement.ManualAddressing = false;

                    objHttpsTransportBindingElement.MaxBufferPoolSize = 524288;

                    objHttpsTransportBindingElement.MaxReceivedMessageSize = 65536;

                    objHttpsTransportBindingElement.AllowCookies = false;

                    objHttpsTransportBindingElement.BypassProxyOnLocal = false;

                    objHttpsTransportBindingElement.DecompressionEnabled = true;

                    objHttpsTransportBindingElement.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;

                    objHttpsTransportBindingElement.KeepAliveEnabled = true;

                    objHttpsTransportBindingElement.MaxBufferSize = 65536;

                    objHttpsTransportBindingElement.Realm = string.Empty;

                    objHttpsTransportBindingElement.TransferMode = TransferMode.Buffered;

                    objHttpsTransportBindingElement.UnsafeConnectionNtlmAuthentication = false;

                    objHttpsTransportBindingElement.UseDefaultWebProxy = true;

                    objHttpsTransportBindingElement.RequireClientCertificate = true;

     

                    TextMessageEncodingBindingElement objTextMessageEncodingBindingElement = new TextMessageEncodingBindingElement();

                    objTextMessageEncodingBindingElement.MessageVersion = MessageVersion.Soap12;

                    objTextMessageEncodingBindingElement.WriteEncoding = Encoding.UTF8;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxDepth = 32;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxStringContentLength = 8192;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxArrayLength = 16384;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxBytesPerRead = 4096;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxNameTableCharCount = 16384;

     

                    CustomBinding objCustomBinding = new CustomBinding(objTextMessageEncodingBindingElement, objHttpsTransportBindingElement);

     

     

     

    Espero que esta lhe seja útil.


    Guilherme Pizolato (MCP) - Microsoft Certified Professional
    quarta-feira, 16 de março de 2011 19:54

Todas as Respostas

  • Boa tarde, Drausio.

    O erro neste caso é referente ao modo de segurança que é utilizado para conectar-se ao WebService. O modo correto à se utilizar é o TransportWithMessageCredential.

    Também sugiro a criação de um binding customizado para acessar o WebService da NFe. Segue abaixo exemplo:

                    HttpsTransportBindingElement objHttpsTransportBindingElement = new HttpsTransportBindingElement();

                    objHttpsTransportBindingElement.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;

                    objHttpsTransportBindingElement.ManualAddressing = false;

                    objHttpsTransportBindingElement.MaxBufferPoolSize = 524288;

                    objHttpsTransportBindingElement.MaxReceivedMessageSize = 65536;

                    objHttpsTransportBindingElement.AllowCookies = false;

                    objHttpsTransportBindingElement.BypassProxyOnLocal = false;

                    objHttpsTransportBindingElement.DecompressionEnabled = true;

                    objHttpsTransportBindingElement.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;

                    objHttpsTransportBindingElement.KeepAliveEnabled = true;

                    objHttpsTransportBindingElement.MaxBufferSize = 65536;

                    objHttpsTransportBindingElement.Realm = string.Empty;

                    objHttpsTransportBindingElement.TransferMode = TransferMode.Buffered;

                    objHttpsTransportBindingElement.UnsafeConnectionNtlmAuthentication = false;

                    objHttpsTransportBindingElement.UseDefaultWebProxy = true;

                    objHttpsTransportBindingElement.RequireClientCertificate = true;

     

                    TextMessageEncodingBindingElement objTextMessageEncodingBindingElement = new TextMessageEncodingBindingElement();

                    objTextMessageEncodingBindingElement.MessageVersion = MessageVersion.Soap12;

                    objTextMessageEncodingBindingElement.WriteEncoding = Encoding.UTF8;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxDepth = 32;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxStringContentLength = 8192;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxArrayLength = 16384;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxBytesPerRead = 4096;

                    objTextMessageEncodingBindingElement.ReaderQuotas.MaxNameTableCharCount = 16384;

     

                    CustomBinding objCustomBinding = new CustomBinding(objTextMessageEncodingBindingElement, objHttpsTransportBindingElement);

     

     

     

    Espero que esta lhe seja útil.


    Guilherme Pizolato (MCP) - Microsoft Certified Professional
    quarta-feira, 16 de março de 2011 19:54
  • Guilherme

       Cara, na brincadeira você bebe, pois pode marcar que você merece (rsrsrsrsr) , pois estava com problema a vários dias, e com as suas dicas a coisa coincidiu, onde recebi o arquivo xml de retorno, agora estou analisando melhor o processo para verificar no que posso ajustar para melhorar a performance do processo.

        Com base no código que deu certo abaixo no que posso melhorar, entre colocar mais algumas linhas por segurança ou perfomance, e a questão de retirar algumas que não teria necessidade.

     Public Function SendNFeAutorizacao4() As Boolean
          Dim f_icRetorno As Boolean = False
    
          Dim f_xmlDados As New XmlDocument
          Dim f_objCertificado As X509Certificate2
          Dim f_xmlResultado As XmlNode
          Dim f_wsCab As New Prod_nfe_2_00.nfeCabecMsg
          Dim f_wsTransacional As Prod_nfe_2_00.NfeRecepcao2Soap12Client
    
          Dim f_httpstransport As New ServiceModel.Channels.HttpsTransportBindingElement
          'Dim f_wsHttpBinding As System.ServiceModel.WSHttpBinding = New System.ServiceModel.WSHttpBinding
          Dim cTeste As String = String.Empty
    
          Try
             f_objCertificado = SelecionarCertificado("")
             f_wsCab.cUF = 35
             f_wsCab.versaoDados = "2.00"
    
             f_httpstransport.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard
             f_httpstransport.ManualAddressing = False
             f_httpstransport.MaxBufferPoolSize = 524288
             f_httpstransport.MaxReceivedMessageSize = 65536
             f_httpstransport.AllowCookies = False
             f_httpstransport.BypassProxyOnLocal = False
             ' httpstransport.DecompressionEnabled = true;
             f_httpstransport.KeepAliveEnabled = True
             f_httpstransport.MaxBufferSize = 65536
             ' httpstransport.Realm = "";
             f_httpstransport.TransferMode = TransferMode.Buffered
             f_httpstransport.UnsafeConnectionNtlmAuthentication = True
             f_httpstransport.UseDefaultWebProxy = True
             f_httpstransport.RequireClientCertificate = True
             ' f_httpstransport.AuthenticationScheme = System.Net.AuthenticationSchemes.Digest
             ' f_httpstransport.ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Digest
    
             Dim f_oTextMessageEncod As New TextMessageEncodingBindingElement()
             f_oTextMessageEncod.MessageVersion = MessageVersion.Soap12
             f_oTextMessageEncod.WriteEncoding = Encoding.UTF8
             f_oTextMessageEncod.MaxReadPoolSize = 64
             f_oTextMessageEncod.MaxWritePoolSize = 16
             ' f_oTextMessageEncod.ReaderQuotas.MaxDepth = 32
             ' f_oTextMessageEncod.ReaderQuotas.MaxStringContentLength = 8192
             ' f_oTextMessageEncod.ReaderQuotas.MaxArrayLength = 16384
             ' f_oTextMessageEncod.ReaderQuotas.Maxbytesperread = 4096
             ' f_oTextMessageEncod.ReaderQuotas.MaxNameTableCharCount = 16384
    
             Dim f_customBinding As New ServiceModel.Channels.CustomBinding(f_oTextMessageEncod, f_httpstransport)
    
             Dim uri As String() = {"https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeRecepcao2.asmx" _
                              , "https://nfe.fazenda.sp.gov.br/nfeweb/services/nferecepcao2.asmx"}
             Dim f_endpointAddress As New ServiceModel.EndpointAddress(uri(0))
    
             'f_wsHttpBinding.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport
             'f_wsHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate
    
             f_wsTransacional = New Prod_nfe_2_00.NfeRecepcao2Soap12Client(f_customBinding, f_endpointAddress)
             'f_wsTransacional.Endpoint.Binding = f_wsHttpBinding
             'f_wsTransacional.Endpoint.Address = f_endpointAddress
             'f_wsTransacional.Endpoint.Name = "NfeRecepcao2Soap12"
             'f_wsTransacional.Endpoint.Contract.Name = "nfeweb.services.nferecepcao2Soap12"
             f_wsTransacional.ClientCredentials.ClientCertificate.Certificate = f_objCertificado
             'f_wsTransacional.Endpoint.Binding.Namespace = "http://www.w3.org/2003/05/soap-envelope"
             ' Dim certificado As New X509Certificate2(_caminhoCertificadoDigital, _senhaCertificadoDigital)
             f_xmlDados.Load("D:\Nucleu\xml_teste\xml\NFe_000000582.xml")
             f_xmlResultado = f_wsTransacional.nfeRecepcaoLote2(f_wsCab, f_xmlDados)
    
             cTeste = "ok"
    
          Catch ex As Exception
             cTeste = ex.Message
          End Try
          Return f_icRetorno
       End Function

    terça-feira, 3 de março de 2015 04:34
  • Guilherme

        Para o processo de NFe, você saberia se devo mudar a configuração abaixo, pois estou recebendo o erro abaixo, isto quando vou receber o retorno do envio, com o status do erro abaixo, pelo xml, e estou com dúvida se poderia ser alguma coisa relacionado ao formato de envio ?

    objTextMessageEncodingBindingElement.WriteEncoding = Encoding.UTF8;

    <cStat>225</cStat>
    <xMotivo>Rejeição: Falha no Schema XML do lote de NFe</xMotivo>

    sábado, 7 de março de 2015 12:03