/// <summary> /// Envia um arquivo para o webservice da NFE e recebe a resposta. /// </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/2009</date> private object EnviaArquivoERecebeResposta(int tipo, string arqXMLRetorno, string arqERRRetorno) { object vStatus = "Ocorreu uma falha ao tentar obter a situação do serviço junto ao SEFAZ.\r\n\r\n" + "O problema pode ter ocorrido por causa dos seguintes fatores:\r\n\r\n" + "- Problema com o certificado digital\r\n" + "- Necessidade de atualização da cadeia de certificados digitais\r\n" + "- Falha de conexão com a internet\r\n" + "- Falha nos servidores do SEFAZ\r\n\r\n" + "Afirmamos que a produtora do software não se responsabiliza por decisões tomadas e/ou execuções realizadas com base nas informações acima.\r\n\r\n"; DateTime startTime; DateTime stopTime; TimeSpan elapsedTime; long elapsedMillieconds; startTime = DateTime.Now; while (true) { stopTime = DateTime.Now; elapsedTime = stopTime.Subtract(startTime); elapsedMillieconds = (int)elapsedTime.TotalMilliseconds; if (elapsedMillieconds >= 120000) //120.000 ms que corresponde á 120 segundos que corresponde a 2 minutos { break; } if (File.Exists(arqXMLRetorno)) { if (!Auxiliar.FileInUse(arqXMLRetorno)) { try { //Ler o status do serviço no XML retornado pelo WebService //XmlTextReader oLerXml = new XmlTextReader(ArqXMLRetorno); try { GerarXML oGerar = new GerarXML(Emp); if (tipo == 1) { vStatus = ProcessaStatusServico(arqXMLRetorno); } else { vStatus = oGerar.ProcessaConsultaCadastro(arqXMLRetorno); } } catch (Exception ex) { vStatus = ex.Message; break; //Se não conseguir ler o arquivo vai somente retornar ao loop para tentar novamente, pois //pode ser que o arquivo esteja em uso ainda. } //Detetar o arquivo de retorno try { FileInfo oArquivoDel = new FileInfo(arqXMLRetorno); oArquivoDel.Delete(); break; } catch { //Somente deixa fazer o loop novamente e tentar deletar } } catch (Exception ex) { vStatus += ex.Message; } } } else if (File.Exists(arqERRRetorno)) { //Retornou um arquivo com a extensão .ERR, ou seja, deu um erro, //futuramente tem que retornar esta mensagem para a MessageBox do usuário. //Detetar o arquivo de retorno try { vStatus += System.IO.File.ReadAllText(arqERRRetorno, Encoding.Default); System.IO.File.Delete(arqERRRetorno); break; } catch { //Somente deixa fazer o loop novamente e tentar deletar } } Thread.Sleep(3000); } //Retornar o status do serviço return(vStatus); }