/// <summary> /// VerConsultaCadastroClass /// </summary> /// <param name="XmlNfeDadosMsg"></param> /// <returns></returns> public object VerConsultaCadastro(string XmlNfeDadosMsg) { Auxiliar oAux = new Auxiliar(); GerarXML oGerar = new GerarXML(Emp); string ArqXMLRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.ConsCad) + "-ret-cons-cad.xml"; string ArqERRRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.ConsCad) + "-ret-cons-cad.err"; object vRetorno = null; try { vRetorno = EnviaArquivoERecebeResposta(2, ArqXMLRetorno, ArqERRRetorno); //vRetorno = ProcessaConsultaCadastroClass(@"c:\usr\nfe\uninfe\modelos\retorno-cons-cad.txt"); } finally { oAux.DeletarArquivo(ArqERRRetorno); oAux.DeletarArquivo(ArqXMLRetorno); } return(vRetorno); }
/// <summary> /// Verifica e retorna o Status do Servido da NFE. Para isso este método gera o arquivo XML necessário /// para obter o status do serviõ e faz a leitura do XML de retorno, disponibilizando uma string com a mensagem /// obtida. /// </summary> /// <returns>Retorna uma string com a mensagem obtida do webservice de status do serviço da NFe</returns> /// <example>string vPastaArq = this.CriaArqXMLStatusServico();</example> /// <by>Wandrey Mundin Ferreira</by> /// <date>17/06/2008</date> public string VerStatusServico(string XmlNfeDadosMsg) { Auxiliar oAux = new Auxiliar(); string ArqXMLRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.PedSta) + "-sta.xml"; string ArqERRRetorno = Empresa.Configuracoes[Emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, ExtXml.PedSta) + "-sta.err"; string result = string.Empty; try { result = (string)EnviaArquivoERecebeResposta(1, ArqXMLRetorno, ArqERRRetorno); } finally { oAux.DeletarArquivo(ArqERRRetorno); oAux.DeletarArquivo(ArqXMLRetorno); } return(result); }
/// <summary> /// Gravar o XML de retorno com as informações do UniNFe para o aplicativo de ERP /// </summary> /// <param name="oNfe">Objeto da classe UniNfeClass para conseguir pegar algumas informações para gravar o XML</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>29/01/2009</date> private void GravarXMLDadosCertificado(string ArquivoXml) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; string sArqRetorno = string.Empty; Auxiliar oAux = new Auxiliar(); if (Path.GetExtension(ArquivoXml).ToLower() == ".txt") { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.txt"; } else { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.xml"; } try { InfoApp oInfUniNfe = new InfoApp(); //Deletar o arquivo de solicitação do serviço FileInfo oArquivo = new FileInfo(ArquivoXml); oArquivo.Delete(); oInfUniNfe.GravarXMLInformacoes(sArqRetorno); } catch (Exception ex) { try { oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArqRetorno) + ".err", ex.Message); } catch { //Se também falhou gravar o arquivo de retorno para o ERP, infelizmente não posso fazer mais nada. Deve estar com algum problema na rede, HD, permissão de acesso as pastas, etc... Wandrey 09/03/2010 } } }
/// <summary> /// Converter arquivos de NFe no formato TXT para XML /// </summary> /// <by>Wandrey Mundin Ferreira</by> /// <date>03/069/2009</date> protected void ConvTXT(string vPasta) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; Auxiliar oAux = new Auxiliar(); List <string> lstArquivos = this.ArquivosPasta(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/, "*-nfe.txt"); for (int i = 0; i < lstArquivos.Count; i++) { if (Auxiliar.FileInUse(lstArquivos[i])) { continue; } UnitxtTOxmlClass oUniTxtToXml = new UnitxtTOxmlClass(); string ccMessage = string.Empty; string ccExtension = "-nfe.err"; try { /// /// exclui o arquivo de erro /// oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension)); oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + "-nfe-ret.xml")); oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaErro + "\\" + Path.GetFileName(lstArquivos[i])); /// /// exclui o arquivo TXT original /// oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt"); /// /// processa a conversão /// oUniTxtToXml.Converter(lstArquivos[i], vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/); //Deu tudo certo com a conversão? if (string.IsNullOrEmpty(oUniTxtToXml.cMensagemErro)) { /// /// danasa 8-2009 /// if (oUniTxtToXml.cRetorno.Count == 0) { ccMessage = "cStat=02\r\n" + "xMotivo=Falha na conversão. Sem informações para converter o arquivo texto"; oAux.MoveArqErro(lstArquivos[i], ".txt"); } else { /// /// salva o arquivo texto original /// FileInfo otxtArquivo = new FileInfo(lstArquivos[i]); if (vPasta.Equals(Empresa.Configuracoes[emp].PastaEnvio)) { string vvNomeArquivoDestino = Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt"; otxtArquivo.MoveTo(vvNomeArquivoDestino); } ccExtension = "-nfe.txt"; ccMessage = "cStat=01\r\n" + "xMotivo=Convertido com sucesso. Foi(ram) convertida(s) " + oUniTxtToXml.cRetorno.Count.ToString() + " nota(s) fiscal(is)"; foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { /// /// monta o texto que será gravado no arquivo de aviso ao ERP /// ccMessage += Environment.NewLine + "Nota fiscal: " + txtClass.NotaFiscal.ToString("000000000") + " Série: " + txtClass.Serie.ToString("000") + " - ChaveNFe: " + txtClass.ChaveNFe; /// /// move o arquivo XML criado na pasta Envio\Convertidos para a pasta Envio /// ou /// move o arquivo XML criado na pasta Validar\Convertidos para a pasta Validar /// FileInfo oArquivo = new FileInfo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName); string vNomeArquivoDestino = vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\" + txtClass.XMLFileName; /// /// excluo o XML se já existe /// oAux.DeletarArquivo(vNomeArquivoDestino); /// /// move o arquivo da pasta "Envio\Convertidos" para a pasta "Envio" /// ou /// move o arquivo da pasta "Validar\Convertidos" para a pasta "Validar" /// oArquivo.MoveTo(vNomeArquivoDestino); } } } else { /// /// danasa 8-2009 /// ccMessage = "cStat=99\r\n" + "xMotivo=Falha na conversão\r\n" + "MensagemErro=" + oUniTxtToXml.cMensagemErro; } } catch (Exception ex) { ccMessage = ex.Message; ccExtension = "-nfe.err"; } if (!string.IsNullOrEmpty(ccMessage)) { oAux.MoveArqErro(lstArquivos[i], ".txt"); /// /// exclui todos os XML gerados na pasta Enviados\convertidos /// foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { oAux.DeletarArquivo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName); } /// /// danasa 8-2009 /// /// Gravar o retorno para o ERP em formato TXT com o erro ocorrido /// oAux.GravarArqErroERP(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension, ccMessage); } } }
private const int _Minutos = 10; //10 minutos? public NFeEmProcessamento() { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; if (Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento.Year > 1) { /// /// executa de 10x10 minutos para evitar ter que acessar o HD sem necessidade /// DateTime dCheck = Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento.AddMinutes(_Minutos); if (dCheck > DateTime.Now) { return; } } Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento = DateTime.Now; this.oAux = new Auxiliar(); try { /// /// le todos os arquivos que estão na pasta em processamento /// string[] files = Directory.GetFiles(Empresa.Configuracoes[emp].PastaEnviado + "\\" + PastaEnviados.EmProcessamento.ToString(), "*" + ExtXml.Nfe, SearchOption.TopDirectoryOnly); /// /// considera os arquivos em que a data do ultimo acesso é superior a 10 minutos /// DateTime UltimaData = DateTime.Now.AddMinutes(-_Minutos); foreach (string file in files) { if (!Auxiliar.FileInUse(file)) { FileInfo fi = new FileInfo(file); //usar a última data de acesso, e não a data de criação if (fi.LastWriteTime <= UltimaData) { if (this.oLerXml == null) { this.oLerXml = new LerXML(); this.oGerarXml = new GerarXML(emp); this.fluxo = new FluxoNfe(); } try { //Ler a NFe oLerXml.Nfe(file); //Verificar se o -nfe.xml existe na pasta de autorizados bool NFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, ExtXml.Nfe); //Verificar se o -procNfe.xml existe na past de autorizados bool procNFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, ExtXmlRet.ProcNFe); //Se um dos XML´s não estiver na pasta de autorizadas ele força finalizar o processo da NFe. if (!NFeJaNaAutorizada || !procNFeJaNaAutorizada) { //Verificar se a NFe está no fluxo, se não estiver vamos incluir ela para que funcione //a rotina de gerar o -procNFe.xml corretamente. Wandrey 21/10/2009 if (!fluxo.NfeExiste(oLerXml.oDadosNfe.chavenfe)) { fluxo.InserirNfeFluxo(oLerXml.oDadosNfe.chavenfe, oAux.ExtrairNomeArq(file, ExtXml.Nfe) + ExtXml.Nfe); } //gera um -ped-sit.xml mesmo sendo autorizada ou denegada, pois assim sendo, o ERP precisaria dele string vArquivoSit = oLerXml.oDadosNfe.chavenfe.Substring(3); oGerarXml.Consulta(vArquivoSit + ExtXml.PedSit, Convert.ToInt32(oLerXml.oDadosNfe.tpAmb), Convert.ToInt32(oLerXml.oDadosNfe.tpEmis), oLerXml.oDadosNfe.chavenfe.Substring(3)); } else { //Move o XML da pasta em processamento para a pasta de XML´s com erro (-nfe.xml) oAux.MoveArqErro(file); //Move o XML da pasta em processamento para a pasta de XML´s com erro (-procNFe.xml) oAux.MoveArqErro(Empresa.Configuracoes[emp].PastaEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + oAux.ExtrairNomeArq(file, ExtXml.Nfe) + ExtXmlRet.ProcNFe); //Tirar a nota fiscal do fluxo fluxo.ExcluirNfeFluxo(oLerXml.oDadosNfe.chavenfe); } } catch (Exception ex) { /// /// grava o arquivo com extensao .ERR /// oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(file) + ".err", ex.Message); } } } } } catch (Exception ex) { /// /// grava o arquivo generico /// oAux.GravarArqErroERP(string.Format(InfoApp.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddThhmmss")), ex.Message); } }
private void toolStripButton_validar_Click(object sender, EventArgs e) { this.textBox_resultado.Text = ""; if (this.textBox_arqxml.Text == "") { this.textBox_resultado.Text = "Arquivo não encontrado."; return; } //Copiar o arquivo XML para temporários para assinar e depois vou validar o que está nos temporários Auxiliar oAux = new Auxiliar(); FileInfo oArquivo = new FileInfo(this.textBox_arqxml.Text); string cArquivo = System.IO.Path.GetTempPath() + oAux.ExtrairNomeArq(this.textBox_arqxml.Text, ".xml"); FileInfo oArqDestino = new FileInfo(cArquivo); if (File.Exists(cArquivo)) //Deletar o arquivo antes de copiar se existir na pasta de temporários { oArqDestino.Delete(); } oArquivo.CopyTo(cArquivo); //Detectar o tipo do arquivo oValidarXML.TipoArquivoXML(cArquivo); //Assinar o arquivo XML copiado para a pasta TEMP bool lAssinar = false; string cTagAssinar = ""; if (oValidarXML.TagAssinar != string.Empty) { lAssinar = true; cTagAssinar = oValidarXML.TagAssinar; } bool lValidar = false; if (lAssinar == true) { AssinaturaDigital oAD = new AssinaturaDigital(); try { oAD.Assinar(cArquivo, cTagAssinar, Empresa.Configuracoes[Emp].X509Certificado); lValidar = true; } catch (Exception ex) { lValidar = false; this.textBox_tipoarq.Text = oValidarXML.cRetornoTipoArq; this.textBox_resultado.Text = "Ocorreu um erro ao tentar assinar o XML: \r\n\r\n" + ex.Message; } } else { lValidar = true; } if (lValidar == true) { //Validar o arquivo if (oValidarXML.nRetornoTipoArq >= 1 && oValidarXML.nRetornoTipoArq <= SchemaXML.MaxID) { oValidarXML.Validar(cArquivo, oValidarXML.cArquivoSchema); if (oValidarXML.Retorno == 0) { this.textBox_resultado.Text = "Arquivo validado com sucesso;"; } else { this.textBox_resultado.Text = "XML INCONSISTENTE!\r\n\r\n" + oValidarXML.RetornoString; } } else { this.textBox_tipoarq.Text = oValidarXML.cRetornoTipoArq; this.textBox_resultado.Text = "XML INCONSISTENTE!\r\n\r\n" + oValidarXML.cRetornoTipoArq; } } oArqDestino.Delete(); }
/// <summary> /// Assinar e validar o XML da Nota Fiscal Eletrônica e move para a pasta de assinados /// </summary> /// <param name="bMoverXML">true = Mover XML assinado da pasta de Lote para a subpasta Assinado</param> /// <param name="strPasta">Nome da pasta onde está o XML a ser validado e assinado</param> /// <returns>true = Conseguiu assinar e validar</returns> /// <by>Wandrey Mundin Ferreira</by> /// <date>03/04/2009</date> public Boolean AssinarValidarXMLNFe(string strPasta) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; Boolean bRetorna = false; Boolean bAssinado = this.Assinado(this.vXmlNfeDadosMsg); Boolean bValidadoSchema = false; Boolean bValidacaoGeral = false; //Criar Pasta dos XML´s a ser enviado em Lote já assinados string strPastaLoteAssinado = strPasta + InfoApp.NomePastaXMLAssinado; //Se o arquivo XML já existir na pasta de assinados, vou avisar o ERP que já tem um em andamento string strArqDestino = strPastaLoteAssinado + "\\" + oAux.ExtrairNomeArq(this.vXmlNfeDadosMsg, ".xml") + ".xml"; try { //Fazer uma leitura de algumas tags do XML LerXML.DadosNFeClass oDadosNFe = this.LerXMLNFe(this.vXmlNfeDadosMsg); string ChaveNfe = oDadosNFe.chavenfe; string TpEmis = oDadosNFe.tpEmis; //Inserir NFe no XML de controle do fluxo try { FluxoNfe oFluxoNfe = new FluxoNfe(); if (oFluxoNfe.NfeExiste(ChaveNfe)) { //Mover o arquivo da pasta em processamento para a pasta de XML´s com erro oAux.MoveArqErro(Empresa.Configuracoes[emp].PastaEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + oAux.ExtrairNomeArq(this.vXmlNfeDadosMsg, ".xml") + ".xml"); //Deletar a NFE do arquivo de controle de fluxo oFluxoNfe.ExcluirNfeFluxo(ChaveNfe); //Vou forçar uma exceção, e o ERP através do inicio da mensagem de erro pode tratar e já gerar uma consulta //situação para finalizar o processo. Assim envito perder os XML´s que estão na pasta EmProcessamento //tendo assim a possibilidade de gerar o -procNfe.XML através da consulta situação. //Wandrey 08/10/2009 //throw new Exception("NFE NO FLUXO: Esta nota fiscal já está na pasta de Notas Fiscais em processo de envio, desta forma não é possível envia-la novamente. Se a nota fiscal estiver presa no fluxo de envio sem conseguir finalizar o processo, gere um consulta situação da NFe para forçar a finalização.\r\n" + // this.vXmlNfeDadosMsg); } else { //Deletar o arquivo XML da pasta de temporários de XML´s com erros se o mesmo existir oAux.DeletarArqXMLErro(Empresa.Configuracoes[emp].PastaErro + "\\" + oAux.ExtrairNomeArq(this.vXmlNfeDadosMsg, ".xml") + ".xml"); } //Validações gerais if (this.ValidacoesGeraisXMLNFe(this.vXmlNfeDadosMsg, oDadosNFe)) { bValidacaoGeral = true; } //Assinar o arquivo XML if (bValidacaoGeral && !bAssinado) { AssinaturaDigital oAD = new AssinaturaDigital(); ValidarXMLs oValidador = new ValidarXMLs(); oValidador.TipoArquivoXML(this.vXmlNfeDadosMsg); oAD.Assinar(this.vXmlNfeDadosMsg, oValidador.TagAssinar, Empresa.Configuracoes[emp].X509Certificado); bAssinado = true; } // Validar o Arquivo XML da NFe com os Schemas se estiver assinado if (bValidacaoGeral && bAssinado) { string cResultadoValidacao = oAux.ValidarArqXML(this.vXmlNfeDadosMsg); if (cResultadoValidacao == "") { bValidadoSchema = true; } else { //Registrar o erro da validação do schema para o sistema ERP throw new Exception(cResultadoValidacao); } } //Mover o arquivo XML da pasta de lote para a pasta de XML´s assinados if (bValidadoSchema) { try { //Se a pasta de assinados não existir, vamos criar if (!Directory.Exists(strPastaLoteAssinado)) { Directory.CreateDirectory(strPastaLoteAssinado); } if (!File.Exists(strArqDestino)) { //Mover o arquivo para a pasta de XML´s assinados FileInfo oArquivo = new FileInfo(this.vXmlNfeDadosMsg); oArquivo.MoveTo(strArqDestino); bRetorna = true; } else { oFluxoNfe.InserirNfeFluxo(ChaveNfe, oAux.ExtrairNomeArq(strArqDestino, ".xml") + ".xml"); throw new IOException("Esta nota fiscal já está na pasta de Notas Fiscais assinadas e em processo de envio, desta forma não é possível enviar a mesma novamente.\r\n" + this.vXmlNfeDadosMsg); } } catch (IOException ex) { throw (ex); } catch (Exception ex) { throw (ex); } } if (bRetorna) { try { oFluxoNfe.InserirNfeFluxo(ChaveNfe, oAux.ExtrairNomeArq(strArqDestino, ".xml") + ".xml"); } catch (Exception ex) { throw (ex); } } } catch (Exception ex) { throw (ex); } } catch (Exception ex) { try { oAux.GravarArqErroServico(this.vXmlNfeDadosMsg, ExtXml.Nfe, ExtXmlRet.Nfe_ERR, ex.Message); //Se já foi movido o XML da Nota Fiscal para a pasta em Processamento, vou ter que //forçar mover para a pasta de XML com erro neste ponto. oAux.MoveArqErro(strArqDestino); } catch { //Se ocorrer algum erro na hora de tentar gravar o XML de erro para o ERP ou mover o arquivo XML para a pasta de XML com erro, não //vou poder fazer nada, pq foi algum erro de rede, permissão de acesso a pasta ou arquivo, etc. //Wandey 13/03/2010 } } return(bRetorna); }
/// <summary> /// Metodo responsável por invocar o serviço do WebService do SEFAZ /// </summary> /// <param name="oWSProxy">Objeto da classe construida do WSDL</param> /// <param name="oServicoWS">Objeto da classe de envio do XML</param> /// <param name="cMetodo">Método da classe de envio do XML que faz o envio</param> /// <param name="oCabecMsg">Objeto da classe de cabecalho do serviço</param> /// <param name="oServicoNFe">Objeto do Serviço de envio da NFE do UniNFe</param> /// <param name="cFinalArqEnvio">string do final do arquivo a ser enviado. Sem a extensão ".xml"</param> /// <param name="cFinalArqRetorno">string do final do arquivo a ser gravado com o conteúdo do retorno. Sem a extensão ".xml"</param> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 17/03/2010 /// </remarks> public void Invocar(WebServiceProxy oWSProxy, object oServicoWS, string cMetodo, object oCabecMsg, object oServicoNFe, string cFinalArqEnvio, string cFinalArqRetorno) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; XmlDocument docXML = new XmlDocument(); // Definir o tipo de serviço da NFe Type typeServicoNFe = oServicoNFe.GetType(); // Resgatar o nome do arquivo XML a ser enviado para o webservice string XmlNfeDadosMsg = (string)(typeServicoNFe.InvokeMember("vXmlNfeDadosMsg", System.Reflection.BindingFlags.GetProperty, null, oServicoNFe, null)); try { //Verificar se o certificado digital está vencido, se tiver vai forçar uma exceção CertificadoDigital CertDig = new CertificadoDigital(); CertDig.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado); if (CertDig.lLocalizouCertificado == true) { if (DateTime.Compare(DateTime.Now, CertDig.dValidadeFinal) > 0) { throw new ExceptionInvocarObjeto(ErroPadrao.CertificadoVencido, "(" + CertDig.dValidadeInicial.ToString() + " a " + CertDig.dValidadeFinal.ToString() + ")"); } } // Exclui o Arquivo de Erro oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(XmlNfeDadosMsg, cFinalArqEnvio + ".xml") + cFinalArqRetorno + ".err"); // Validar o Arquivo XML string cResultadoValidacao = oAux.ValidarArqXML(XmlNfeDadosMsg); if (cResultadoValidacao != "") { throw new Exception(cResultadoValidacao); } // Montar o XML de Lote de envio de Notas fiscais docXML.Load(XmlNfeDadosMsg); } catch (Exception ex) { throw (ex); } // Definir Proxy if (ConfiguracaoApp.Proxy) { oWSProxy.SetProp(oServicoWS, "Proxy", Auxiliar.DefinirProxy()); } // Limpa a variável de retorno XmlNode XmlRetorno; //Vou mudar o timeout para evitar que demore a resposta e o uninfe aborte antes de recebe-la. Wandrey 17/09/2009 //Isso talvez evite de não conseguir o número do recibo se o serviço do SEFAZ estiver lento. oWSProxy.SetProp(oServicoWS, "Timeout", 60000); try { //Verificar antes se tem conexão com a internet, se não tiver já gera uma exceção no padrão já esperado pelo ERP if (!InternetCS.IsConnectedToInternet()) { //Registrar o erro da validação para o sistema ERP throw new ExceptionInvocarObjeto(ErroPadrao.FalhaInternet, "\r\nArquivo: " + XmlNfeDadosMsg); } //Atribuir conteúdo para uma propriedade da classe NfeStatusServico2 if (cMetodo.Substring(0, 3).ToLower() == "sce") // DPEC { oWSProxy.SetProp(oServicoWS, "sceCabecMsgValue", oCabecMsg); } else { switch (ConfiguracaoApp.TipoAplicativo) { case UniNFeLibrary.Enums.TipoAplicativo.Cte: oWSProxy.SetProp(oServicoWS, "cteCabecMsgValue", oCabecMsg); break; case UniNFeLibrary.Enums.TipoAplicativo.Nfe: oWSProxy.SetProp(oServicoWS, "nfeCabecMsgValue", oCabecMsg); break; default: break; } } try { //Invocar o membro XmlRetorno = (XmlNode)oWSProxy.InvokeXML(oServicoWS, cMetodo, new object[] { docXML }); } catch (Exception ex) { if (cMetodo.Substring(0, 3).ToLower() == "sce") //danasa 21/10/2010 { throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWSDPEC, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message); } //Se for XML da NFe a mensagem é padronizada, caso contrário é uma mensagem geral. Wandrey 25/02/2011 if (cMetodo == "nfeRecepcaoLote2") { throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlNFeWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message); } else { throw new ExceptionEnvioXML(ErroPadrao.FalhaEnvioXmlWS, "\r\nArquivo " + XmlNfeDadosMsg + "\r\nMessage Exception: " + ex.Message); } } //Atualizar o atributo do serviço da Nfe com o conteúdo retornado do webservice do sefaz typeServicoNFe.InvokeMember("vStrXmlRetorno", System.Reflection.BindingFlags.SetProperty, null, oServicoNFe, new object[] { XmlRetorno.OuterXml }); // Registra o retorno de acordo com o status obtido if (cFinalArqEnvio != string.Empty && cFinalArqRetorno != string.Empty) { typeServicoNFe.InvokeMember("XmlRetorno", System.Reflection.BindingFlags.InvokeMethod, null, oServicoNFe, new Object[] { cFinalArqEnvio + ".xml", cFinalArqRetorno + ".xml" }); } } catch (ExceptionEnvioXML ex) { throw (ex); } catch (ExceptionInvocarObjeto ex) { throw (ex); } catch (Exception ex) { throw (ex); } }