Пример #1
0
        /// <summary>
        /// Estabelece conexão com o Webservice e faz o envio do XML e recupera o retorno. Conteúdo retornado pelo webservice pode ser recuperado através das propriedades RetornoServicoXML ou RetornoServicoString.
        /// </summary>
        /// <param name="xml">XML a ser enviado para o webservice</param>
        /// <param name="servico">Parâmetros para execução do serviço (parâmetros do soap)</param>
        /// <param name="certificado">Certificado digital a ser utilizado na conexão com os serviços</param>
        public void ExecutarServico(XmlDocument xml, object servico, X509Certificate2 certificado)
        {
            WSSoap soap = (WSSoap)servico;

            try
            {
                Uri    urlpost = new Uri(soap.EnderecoWeb);
                string soapXML = EnveloparXML(soap, "", xml.OuterXml);
                byte[] buffer2 = Encoding.UTF8.GetBytes(soapXML);

                ServicePointManager.Expect100Continue = false;
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RetornoValidacao);
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;

                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(urlpost);
                httpWebRequest.Headers.Add("SOAPAction: " + soap.ActionWeb);
                httpWebRequest.CookieContainer = cookies;
                httpWebRequest.Timeout         = 60000;
                httpWebRequest.ContentType     = (string.IsNullOrEmpty(soap.ContentType) ? "application/soap+xml; charset=utf-8;" : soap.ContentType);
                httpWebRequest.Method          = "POST";
                httpWebRequest.ClientCertificates.Add(certificado);
                httpWebRequest.ContentLength = buffer2.Length;

                Stream postData = httpWebRequest.GetRequestStream();
                postData.Write(buffer2, 0, buffer2.Length);
                postData.Close();

                HttpWebResponse responsePost         = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream          streamPost           = responsePost.GetResponseStream();
                StreamReader    streamReaderResponse = new StreamReader(streamPost, Encoding.UTF8);

                XmlDocument retornoXml = new XmlDocument();
                retornoXml.LoadXml(streamReaderResponse.ReadToEnd());

                RetornoServicoString = retornoXml.GetElementsByTagName(soap.TagRetorno)[0].ChildNodes[0].OuterXml;
                RetornoServicoXML    = new XmlDocument
                {
                    PreserveWhitespace = false
                };
                RetornoServicoXML.LoadXml(RetornoServicoString);
            }
            catch
            {
                throw;
            }
        }
Пример #2
0
        /// <summary>
        /// Criar o envelope (SOAP) para envio ao webservice
        /// </summary>
        /// <param name="soap">Soap</param>
        /// <param name="xmlHeader">string do XML a ser enviado no cabeçalho do soap</param>
        /// <param name="xmlBody">string do XML a ser enviado no corpo do soap</param>
        /// <returns>string do envelope (soap)</returns>
        private static string EnveloparXML(WSSoap soap, string xmlHeader, string xmlBody)
        {
            string retorna = string.Empty;

            if (!string.IsNullOrEmpty(xmlHeader))
            {
                if (xmlHeader.IndexOf("?>") >= 0)
                {
                    xmlHeader = xmlHeader.Substring(xmlHeader.IndexOf("?>") + 2);
                }
            }

            if (xmlBody.IndexOf("?>") >= 0)
            {
                xmlBody = xmlBody.Substring(xmlBody.IndexOf("?>") + 2);
            }

            retorna = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

            if (!string.IsNullOrEmpty(soap.SoapString))
            {
                //Soap string definido nas configurações
                retorna += soap.SoapString.Replace("{0}", xmlHeader).Replace("{1}", soap.ActionWeb).Replace("{2}", xmlBody);
            }
            else
            {
                //Soap string default
                retorna += "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
                retorna += "<soap:Header>";
                retorna += xmlHeader;
                retorna += "</soap:Header>";
                retorna += "<soap:Body>";
                retorna += "<nfeDadosMsg xmlns=\"" + soap.ActionWeb + "\">";
                retorna += xmlBody;
                retorna += "</nfeDadosMsg>";
                retorna += "</soap:Body>";
                retorna += "</soap:Envelope>";
            }

            return(retorna);
        }