none
Como habilitar SSL 3.0 em aplicações C# windows form RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Eu tenho um aplicação C# windows form, que envia dados ao web services da SEFAZ - BA, NFe.

    desde as sexta-feira estamos tendo problemas de envio dos dados.

    a resposta do fale conosco é a abaixo:

    O modo normal de emissão da NF-e já está funcionando normalmente, para aplicações com SSL 3.0 ativados.
    Sugerimos que entre em contato com o suporte de sua aplicação verificando a situação.

    Porém com nenhuma alteração eu consegui consumir o web service de consulta de status.

    Fiz a referencia para o service, estou utilizando CustomBinding, veja o código abaixo, e até consigo as vezes conectar, outras vezes não.

    Alguém poderia me dar uma ideia de como tentar corrigir?

    obrigado.

                        Flexxone.SPED.Direto.NFe.WinUi.BANfeStatusServico.NfeStatusServicoSoapClient client = null;
                        try
                        {
    
                            this.txtStatusServico.Text = "Aguarde...";
    
                            XmlDocument soapEnvelop = new XmlDocument();
                            // homologação
                            if ((comboBox_Ambiente_StatusServico.SelectedValue.ToString() == "2") && comboBox_Uf.SelectedValue.ToString() == "29")
                                soapEnvelop.LoadXml(
                                @"<?xml version=""1.0"" encoding=""utf-8""?><consStatServ versao=""3.10"" xmlns=""http://www.portalfiscal.inf.br/nfe""><tpAmb>2</tpAmb><cUF>29</cUF><xServ>STATUS</xServ></consStatServ>");
                            else
                                soapEnvelop.LoadXml(
                                @"<?xml version=""1.0"" encoding=""utf-8""?><consStatServ versao=""3.10"" xmlns=""http://www.portalfiscal.inf.br/nfe""><tpAmb>1</tpAmb><cUF>29</cUF><xServ>STATUS</xServ></consStatServ>");
    
                            Flexxone.SPED.Direto.NFe.WinUi.BANfeStatusServico.nfeCabecMsg nfeCabecMsg = new WinUi.BANfeStatusServico.nfeCabecMsg();
                            nfeCabecMsg.cUF = "29";
                            nfeCabecMsg.versaoDados = "3.10";
                            XmlNode xmlEnvio = (XmlNode)soapEnvelop;
    
                            EndpointAddress ea = new
                               EndpointAddress(comboBox_Ambiente_StatusServico.SelectedValue.ToString() == "2" ? "https://hnfe.sefaz.ba.gov.br/webservices/NfeStatusServico/NfeStatusServico.asmx" :
                               "https://nfe.sefaz.ba.gov.br/webservices/NfeStatusServico/NfeStatusServico.asmx");
    
                            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 = false;
                            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);
                            client = new WinUi.BANfeStatusServico.NfeStatusServicoSoapClient(objCustomBinding, ea);
                            client.ClientCredentials.ClientCertificate.SetCertificate(
                                StoreLocation.CurrentUser,
                                StoreName.My,
                                X509FindType.FindBySubjectDistinguishedName,
                                Empresa.Configuracoes[0].Certificado);
                            XmlNode XmlRetorno = client.nfeStatusServicoNF(nfeCabecMsg, xmlEnvio);
                        }
                        catch
                        {
                        }
                        finally
                        {
                            if ((client != null) && client.State == CommunicationState.Opened)
                                client.Close();
                        }
    

    quarta-feira, 29 de junho de 2016 19:12

Respostas

  • Olá a todos.

    Não consegui enviar os dados utilizando o custombinding, por isso, parti para tentar outras soluções:

    1 - Enivar usando o  webHttprequest e soap envelope.

        Funcionou assim: (naturalmente estou publicando com alguns textos fixos, porque é para o Web service da Bahia.)

    		  {
    					...
    					
    					 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
    
    					 var _url = WSDLUrl.Replace("?wsdl","");
    					 var _action = WSDLUrl.Replace("?wsdl", "") + "?op=nfeStatusServicoNF";
    
    					 XmlDocument soapEnvelopeXml = CreateSoapEnvelope();
    					 System.Net.HttpWebRequest webRequest = CreateWebRequest(_url, _action);
    					 webRequest.ClientCertificates.Add(_X509Cert);
    					 webRequest.Proxy = null;
    					 webRequest.KeepAlive = true;
    
    					 var bytes = Encoding.UTF8.GetBytes(soapEnvelopeXml.OuterXml);
    					 webRequest.ContentLength = bytes.Length;
    
    					 using (var stream = webRequest.GetRequestStream())
    					 {
    						  stream.Write(bytes, 0, bytes.Length);
    					 }
    
    					 var response = (HttpWebResponse)webRequest.GetResponse();
    
    					 var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    					 ...
    			}
    									 
    			private static System.Net.HttpWebRequest CreateWebRequest(string url, string action)
            {
                System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
                webRequest.Headers.Add("SOAPAction", action);
                webRequest.ContentType = "application/soap+xml;charset=\"utf-8\""; // application/soap+xml; charset=utf-8
                webRequest.Accept = "text/xml";
                webRequest.Method = "POST";
                return webRequest;
            }
    
            private static XmlDocument CreateSoapEnvelope()
            {
                XmlDocument soapEnvelop = new XmlDocument();
                soapEnvelop.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                    "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
                    " <soap12:Header>" +
                    "  <nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico\">" +
                    "   <cUF>29</cUF>" +
                    "   <versaoDados>3.10</versaoDados>" +
                    "  </nfeCabecMsg>" +
                    " </soap12:Header>" +
                    " <soap12:Body>" +
                    "  <nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico\">" +
                    "   <consStatServ versao=\"3.10\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">" +
                    "    <tpAmb>2</tpAmb>" +
                    "    <cUF>29</cUF>" +
                    "    <xServ>STATUS</xServ>" +
                    "   </consStatServ>" +
                    "  </nfeDadosMsg>" +
                    " </soap12:Body>" +
                    "</soap12:Envelope>");
                
                //"<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/1999/XMLSchema""><SOAP-ENV:Body><HelloWorld xmlns=""http://tempuri.org/"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""><int1 xsi:type=""xsd:integer"">12</int1><int2 xsi:type=""xsd:integer"">32</int2></HelloWorld></SOAP-ENV:Body></SOAP-ENV:Envelope>");
                return soapEnvelop;
            }									 
    

    • Marcado como Resposta Jose Geraldo sexta-feira, 1 de julho de 2016 20:47
    sexta-feira, 1 de julho de 2016 20:47

Todas as Respostas

  • Bom dia Jose Geraldo,

    Então as vezes a conexão funciona?

    O SSL não deveria ser habilitado no IIS? Enabling SSL on IIS

    Atenciosamente.


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 30 de junho de 2016 16:01
    Moderador
  • Sim, as vezes a conexão se estabelece na primeira execução, na segunda.

    por um tempo se consegue a conexão.

    depois inicia o erro e somente fechando a aplicacao windows cliente a gente consegue de novo.

    o erro está abaixo:

    quanto ao IIS, o IIS fica no server da SEFAZ correto. Eu só trabalho consumindo os ws deles.

    erro:

    Additional information: An error occurred while making the HTTP request to https://nfe.sefaz.ba.gov.br/webservices/NfeStatusServico/NfeStatusServico.asmx?wsdl. This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case. This could also be caused by a mismatch of the security binding between the client and the server.

    obrigado assim mesmo.

    sexta-feira, 1 de julho de 2016 11:44
  • Olá a todos.

    Não consegui enviar os dados utilizando o custombinding, por isso, parti para tentar outras soluções:

    1 - Enivar usando o  webHttprequest e soap envelope.

        Funcionou assim: (naturalmente estou publicando com alguns textos fixos, porque é para o Web service da Bahia.)

    		  {
    					...
    					
    					 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
    
    					 var _url = WSDLUrl.Replace("?wsdl","");
    					 var _action = WSDLUrl.Replace("?wsdl", "") + "?op=nfeStatusServicoNF";
    
    					 XmlDocument soapEnvelopeXml = CreateSoapEnvelope();
    					 System.Net.HttpWebRequest webRequest = CreateWebRequest(_url, _action);
    					 webRequest.ClientCertificates.Add(_X509Cert);
    					 webRequest.Proxy = null;
    					 webRequest.KeepAlive = true;
    
    					 var bytes = Encoding.UTF8.GetBytes(soapEnvelopeXml.OuterXml);
    					 webRequest.ContentLength = bytes.Length;
    
    					 using (var stream = webRequest.GetRequestStream())
    					 {
    						  stream.Write(bytes, 0, bytes.Length);
    					 }
    
    					 var response = (HttpWebResponse)webRequest.GetResponse();
    
    					 var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    					 ...
    			}
    									 
    			private static System.Net.HttpWebRequest CreateWebRequest(string url, string action)
            {
                System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
                webRequest.Headers.Add("SOAPAction", action);
                webRequest.ContentType = "application/soap+xml;charset=\"utf-8\""; // application/soap+xml; charset=utf-8
                webRequest.Accept = "text/xml";
                webRequest.Method = "POST";
                return webRequest;
            }
    
            private static XmlDocument CreateSoapEnvelope()
            {
                XmlDocument soapEnvelop = new XmlDocument();
                soapEnvelop.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                    "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
                    " <soap12:Header>" +
                    "  <nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico\">" +
                    "   <cUF>29</cUF>" +
                    "   <versaoDados>3.10</versaoDados>" +
                    "  </nfeCabecMsg>" +
                    " </soap12:Header>" +
                    " <soap12:Body>" +
                    "  <nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico\">" +
                    "   <consStatServ versao=\"3.10\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">" +
                    "    <tpAmb>2</tpAmb>" +
                    "    <cUF>29</cUF>" +
                    "    <xServ>STATUS</xServ>" +
                    "   </consStatServ>" +
                    "  </nfeDadosMsg>" +
                    " </soap12:Body>" +
                    "</soap12:Envelope>");
                
                //"<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/1999/XMLSchema""><SOAP-ENV:Body><HelloWorld xmlns=""http://tempuri.org/"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""><int1 xsi:type=""xsd:integer"">12</int1><int2 xsi:type=""xsd:integer"">32</int2></HelloWorld></SOAP-ENV:Body></SOAP-ENV:Envelope>");
                return soapEnvelop;
            }									 
    

    • Marcado como Resposta Jose Geraldo sexta-feira, 1 de julho de 2016 20:47
    sexta-feira, 1 de julho de 2016 20:47