NFE 4.0 - TLS 1.2

 Tópico anterior Próximo tópico Novo tópico

NFE 4.0 - TLS 1.2

C#

 Compartilhe  Compartilhe  Compartilhe
#481011 - 19/04/2018 07:57:07

MARCOSFSAN
SAO PAULO
Cadast. em:Setembro/2009


Pessoal, estou migrando meu  sistema para NFE 4.0 e encontrei o seguinte problema
ao usar o Web Service com o protocolo TLS 1.2 estou recebendo o seguinte erro:SOAP header Action was not understood.
Estou ainda no  NfeStatusServiço e não consigo obter resposta, no modelo antigo sem TLS funciona normalmente.

Alguém passou por isso?  segue o trecho do meu código
  
public string VerificarServicoNFE4_TLS(string Dados, out bool success)
        {
            
            string IdSV = "NfeStatusServico";
            XmlDocument Arquivo = new XmlDocument();
            XmlNode ret = null;          
            
            
            try
            {
                
                string cUF = Retorna_Codigo_UF_IBGE(UF).ToString();
                string url = GetURLWebService(UF, strVersao, bProd, IdSV);

                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                EndpointAddress endPointAddr = new EndpointAddress(url);
                WSHttpBinding bindEndPoint = new WSHttpBinding();
                bindEndPoint.Security.Mode = SecurityMode.Transport;
                bindEndPoint.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
                bindEndPoint.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
                bindEndPoint.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
                bindEndPoint.Security.Transport.Realm = string.Empty;
                bindEndPoint.UseDefaultWebProxy = true;
                bindEndPoint.MaxBufferPoolSize = 65536;
                


                NFeStatusServico4Soap12Client EnvioTLS = new NFeStatusServico4Soap12Client(bindEndPoint, endPointAddr);                                      
                EnvioTLS.ClientCredentials.ClientCertificate.SetCertificate(Cert.Subject.ToString(), StoreLocation.CurrentUser, StoreName.My);
                                
                try
                {
                    Arquivo.LoadXml(Dados);
                }
                catch (Exception ext)
                {
                    success = false;
                    Log Lg = new Log();
                    Lg.LogaEvento("Erro ao formatar XML de Envio ao Webservice da SEFAZ " + IdSV + " " + this.GetType().ToString() + " - " + ext.Message.ToString());
                    Lg = null;
                    return "";
                }
                try
                {
                    ret = EnvioTLS.nfeStatusServicoNF(Arquivo.DocumentElement); //(Cabec, Dados);
                    success = true;
                }
                catch (Exception ex)
                {
                    success = false;
                    Log Lg = new Log();
                    Lg.LogaEvento("Erro " + IdSV + " " + this.GetType().ToString() + " - " + ex.Message.ToString());
                    Lg = null;
                }
                EnvioTLS.Close();
            }
            catch (Exception expt)
            {
                success = false;
                Log Lg = new Log();
                Lg.LogaEvento("Erro " + IdSV + " " + this.GetType().ToString() + " - " + expt.Message.ToString());
                Lg = null;
                throw new Exception("Erro acessando WebService SEFAZ " + expt.Message);
            }

            if (ret != null)
                return ret.OuterXml;
            else
                return "";

        }



Marcos


Resposta escolhida #481014 - 19/04/2018 09:37:29

ELUCIMAR
GOIANIA
Cadast. em:Dezembro/2003


Última edição em 19/04/2018 09:39:04 por ELUCIMAR

Marcos basta acrescentar esse código antes da chamada do método do Webservice.

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;


E.A.M

#481022 - 19/04/2018 11:05:32

MARCOSFSAN
SAO PAULO
Cadast. em:Setembro/2009


ELUCIMAR,
Fiz o que me sugeriu mas o mesmo problema SOAP header Action was not understood

Eu faço da seguinte forma, adicionei o ServiceReference,  criei o Endpoint  conforme mostrei no post acima  e ele não faz a comunicação.
Você conseguiu migrar seu projeto?

Marcos


#481025 - 19/04/2018 11:55:08

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
https://social.msdn.microsoft.com/Forums/pt-BR/ad2dfb81-6309-43f6-bd52-c091bf3ffacb/nfe-20-binding-erro-soap-header-action-was-not-understood?forum=webservicespt

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#481026 - 19/04/2018 12:24:27

MARCOSFSAN
SAO PAULO
Cadast. em:Setembro/2009


Resolvi, adicionei como WEBREFERENCE ao inves de SERVICESREFERENCE  e inseri os parametros  citados pelo  ELUCIMAR.

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

Deu Certo!

Obrigado a todos!

Marcos


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MARCOSFSAN em 19/04/2018 12:24:57