none
NFe - Validação XML com schema - (ConsultaNFeDest) RRS feed

  • Pergunta

  • Estou tentando validar o XML de mensagem de entrada com o schema e recebo erros "Could not find schema information for the element 'consNFeDest'" (acontece com os todos os elementos: versao, tpAmb, xServ, CNPJ, etc...)

    Estou validando com o seguinte código:

    public static bool ValidarXML(string pathXML, string pathSchema)
    {
    //string pathSchema = "c:\\nfe\schemas\\leiauteConsNFeDest_v1.01.xsd";
    
    //string pathXML = "c:\\nfe\schemas\\xmlMsgEntrada.xml";
    
    XmlValidatingReader reader = new XmlValidatingReader(new XmlTextReader(new StreamReader(pathXML)));
    
     XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
    
    schemaCollection.Add("http://www.portalfiscal.inf.br/nfe", pathSchema);
    
    reader.Schemas.Add(schemaCollection);
    
    reader.ValidationEventHandler += new ValidationEventHandler(reader_ValidationEventHandler);
    
    while (reader.Read()) { }
    
    reader.Close();
    
    return ret;
    }


    O arquivo xmlMsgEntrada.xml tem a seguinte estrutura (com cnpj correto, claro): 

    <?xml version="1.0" encoding="UTF-8"?>
    <consNFeDest versao="1.01">
       <tpAmb>2</tpAmb>
       <xServ>CONSULTAR NFE DEST</xServ>
       <CNPJ>11111111111111</CNPJ>
       <indNFe>0</indNFe>
       <indEmi>0</indEmi>
       <ultNSU>0</ultNSU>
    </consNFeDest>

    Esse é o arquivo XML de mensagem de entrada, descrito na NT2012_002.pdf, página 11. E o schema informado nessa mesma página, para o XML é o "consNFeDest_v1.01.xsd". Que contém includes entre os arquivos xsd referenciados.

    Se for olhar esse xsd, realmente não tem informações sobre os elementos versao, tpAmb, xServ, CNPJ, etc... mas em um deles, tem. 

    Já apontei o schema como sendo o "leiauteConsNFeDest_v1.01.xsd", mas o erro persiste.

    Faço a chamada ao serviço web da seguinte forma (compactei os "catches", pra reduzir espaço):

    public string NfeConsultaDest(string pathXML_MsgEntrada, string noSerieCert, string hostWS)
            {
                string strRetorno = string.Empty;
    
                #region CERTIFICADO_DIGITAL
                XmlDocument XMLDoc_Entrada = new XmlDocument();
                X509Certificate2 X509_Cert = new X509Certificate2();
                Certificado cert = new Certificado();
                try
                {
                    XMLDoc_Entrada.Load(pathXML_MsgEntrada);
                    X509_Cert = cert.BuscaNroSerie(noSerieCert, false);
                }
                catch (Exception e)
                {
                    strRetorno = "NfeConsultaDest: " + e.Message;
                }
                #endregion CERTIFICADO_DIGITAL
    
                #region WEBSERVICES
                try
                {
                    NFeConsultaDest wsMSG = new NFeConsultaDest();
                    nfeCabecMsg Cabecalho = new nfeCabecMsg();
    
                    Cabecalho.cUF = "26";
                    Cabecalho.versaoDados = "1.00"; 
                    wsMSG.nfeCabecMsgValue = Cabecalho; 
    
                    wsMSG.Url = hostWS;
                    wsMSG.Timeout = 60000;
                    wsMSG.ClientCertificates.Add(X509_Cert);
                    wsMSG.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
    
                    XmlNode retNode = wsMSG.nfeConsultaNFDest(XMLDoc_Entrada.DocumentElement);
                    //wsMSG.Dispose();
    
                    strRetorno = retNode.OuterXml;
                    MessageBox.Show("RETORNO: " + strRetorno);
    
                }
                catch (Exception e)
                {
                    strRetorno = "Util.Enviar_Evento.e: " + e.Source.ToString() + " - " + e.Message;
                }  
                #endregion WEBSERVICES
    
                return strRetorno;
            }

    Alguma idéia de onde estou errando?!?

    Agradecido!


    Do It Easy, Do It Perfect! Dot Net!

    quinta-feira, 5 de dezembro de 2013 19:41

Todas as Respostas