private void ValidarSchema(consStatServ entity)
        {
            var caminhoSchema = _emisorEmissorServicoConfig.DiretorioSchemaXsd;

            if (!Directory.Exists(caminhoSchema))
            {
                throw new Exception("Diretório de Schemas não encontrado: \n" + caminhoSchema);
            }
            // Define o tipo de validação
            var cfg = new XmlReaderSettings {
                ValidationType = ValidationType.Schema
            };
            //Listar arquivos XSD e inclui-las na validação
            var list = ObterListaNomeSchemas().ToList();

            list.ForEach(n => { cfg.Schemas.Add(null, Path.Combine(caminhoSchema, n)); });
            cfg.ValidationEventHandler += ValidationEventHandler;
            var xml      = Utils.ObterStringXML(entity);
            var reader   = XmlReader.Create(new StringReader(xml), cfg);
            var document = new XmlDocument();

            document.Load(reader);

            //Valida xml
            document.Validate(ValidationEventHandler);
        }
        /// <summary>
        ///     Obter Dados
        /// </summary>
        /// <returns></returns>
        private consStatServ ObterDados()
        {
            var pedStatus = new consStatServ
            {
                cUF    = _emisorEmissorServicoConfig.Estado,
                tpAmb  = _emisorEmissorServicoConfig.Ambiente,
                versao = _versao.ObterVersaoServico()
            };

            return(pedStatus);
        }
        /// <summary>
        ///     Obter mensagem Soap em formato Xml
        ///     <para>Corpo da mensagem compativel com a especificação SOAP e requisitos Sefaz</para>
        /// </summary>
        /// <param name="urlWsdl">Endereço WSDL do serviço</param>
        /// <param name="entity"></param>
        /// <example></example>
        /// <returns></returns>
        protected virtual string ObterCorpoMensagemSoap(string urlWsdl, consStatServ entity)
        {
            var xmlCorpo      = Utils.ObterStringXML(entity);
            var stringBuilder = new StringBuilder();

            stringBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
            stringBuilder.Append(
                "<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\">");
            stringBuilder.Append("<soap:Body>");
            stringBuilder.Append("<nfeDadosMsg xmlns=\"" + urlWsdl + "\">" + xmlCorpo + "</nfeDadosMsg>");
            stringBuilder.Append("</soap:Body>");
            stringBuilder.Append("</soap:Envelope>");
            var msg = stringBuilder.ToString();

            return(msg);
        }
示例#4
0
        /// <summary>
        ///     Consulta o status do Serviço de NFe
        /// </summary>
        /// <returns>Retorna um objeto da classe RetornoNfeStatusServico com os dados status do serviço</returns>
        public RetornoNfeStatusServico NfeStatusServico()
        {
            var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.NfeStatusServico, _cFgServico.VersaoNfeStatusServico);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(ServicoNFe.NfeStatusServico, TipoRecepcaoEvento.Nenhum);

            ws.nfeCabecMsg = new nfeCabecMsg
            {
                cUF         = _cFgServico.cUF,
                versaoDados = versaoServico
            };

            #endregion

            #region Cria o objeto consStatServ

            var pedStatus = new consStatServ
            {
                cUF    = _cFgServico.cUF,
                tpAmb  = _cFgServico.tpAmb,
                versao = versaoServico
            };

            #endregion

            #region Valida, Envia os dados e obtém a resposta

            var xmlStatus = pedStatus.ObterXmlString();
            Validador.Valida(ServicoNFe.NfeStatusServico, TipoRecepcaoEvento.Nenhum, _cFgServico.VersaoNfeStatusServico, xmlStatus);
            var dadosStatus = new XmlDocument();
            dadosStatus.LoadXml(xmlStatus);

            SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-ped-sta.xml", xmlStatus);

            var retorno          = ws.Execute(dadosStatus);
            var retornoXmlString = retorno.OuterXml;
            var retConsStatServ  = new retConsStatServ().CarregarDeXmlString(retornoXmlString);

            SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-sta.xml", retornoXmlString);

            return(new RetornoNfeStatusServico(pedStatus.ObterXmlString(), retConsStatServ.ObterXmlString(), retornoXmlString, retConsStatServ));

            #endregion
        }
 /// <summary>
 ///     Recebe um objeto consStatServ e devolve a string no formato XML
 /// </summary>
 /// <param name="pedStatus">Objeto do tipo consStatServ</param>
 /// <returns>string com XML no do objeto consStatServ</returns>
 public static string ObterXmlString(this consStatServ pedStatus)
 {
     return(FuncoesXml.ClasseParaXmlString(pedStatus));
 }