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); }
/// <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)); }