3
I’m having a hard time returning NF-e authorization using C# (Visual Studio 2008). It’s returning an empty object.
To be made the call from WS I am using the following code:
public string NFeAutorizacao(string XmlEnvio, string VersaoSchema, short Ambiente, short CodIbgeUfEmi, string SiglaWS, string PathCertificado, string SenhaCertificado, ref string MsgErr, ref short FlagErr)
{
try
{
// Converte dados do xml para XmlNode
XmlDocument oXmlDoc = new XmlDocument();
oXmlDoc.LoadXml(XmlEnvio);
XmlNode oNode = oXmlDoc.DocumentElement;
// Carrega o certificado
X509Certificate certificado = new X509Certificate();
certificado = SelecionarCertificado(PathCertificado, SenhaCertificado, ref MsgErr, ref FlagErr);
// Se conseguiu localizar o certificado digital
if (FlagErr == 0)
{
// Identifica o WebService a ser utilizado: "SEFAZ Estadual", "Ambiente Nacional" ou "SCAN"
switch (SiglaWS)
{
case "SEFAZEST": // WebService da SEFAZ Estadual ou Virtual
// Identifica o ambiente a ser utilizado
switch (Ambiente)
{
//Ambiente de Homologação
#region
case 2: // HOMOLOGAÇÃO
// Identifica o código IBGE do Estado
switch (CodIbgeUfEmi)
{
case 31: // MG
// Declara as variáveis do WebService
MG.NfeAutorizacao.Homologacao.NfeAutorizacao wsMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.NfeAutorizacao();
MG.NfeAutorizacao.Homologacao.nfeCabecMsg nfeCabecMsgMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.nfeCabecMsg();
MG.NfeAutorizacao.Homologacao.nfeDadosMsg nfeDadosMsgMG = new BibliotecaNFe.MG.NfeAutorizacao.Homologacao.nfeDadosMsg();
// Coloca os valores no cabeçalho
nfeCabecMsgMG.cUF = CodIbgeUfEmi.ToString().Trim();
nfeCabecMsgMG.versaoDados = VersaoSchema;
wsMG.nfeCabecMsgValue = nfeCabecMsgMG;
nfeDadosMsgMG.Any = new XmlNode[] {oXmlDoc};
nfeDadosMsgMG.Any[0] = oNode;
// Coloca o certificado
wsMG.ClientCertificates.Add(certificado);
wsMG.Timeout = 120000;
// Comunica com o WebService
string obj = nfeDadosMsgMG.Any[0].OuterXml;
Console.WriteLine(obj);
string retorno = wsMG.NfeAutorizacaoLote(nfeDadosMsgMG).ToString();
Console.WriteLine(retorno);
return wsMG.NfeAutorizacaoLote(nfeDadosMsgMG).ToString();
default: // Código não foi informado ou é inválido
FlagErr = 1;
MsgErr = "Erro: Código da UF informada " + CodIbgeUfEmi.ToString().Trim() + ". Código inválido ou SEFAZ não possui WebService próprio.";
return "";
} // switch (CodIbgeUfEmi)
default: // Ambiente incorreto (Diferente de 1 e 2)
FlagErr = 1;
MsgErr = "Erro: Ambiente informado: " + Ambiente.ToString().Trim() + ". Informe um código de ambiente válido.";
return "";
} // switch (Ambiente)
#endregion
default: // WebService não informadou ou parâmetro incorreto
FlagErr = 1;
MsgErr = "Erro: Sigla do WebService a ser utilizado " + SiglaWS.Trim() + ". Informe um código válido.";
return "";
} // switch (SiglaWS)
}
else
{
return ""; // Retorno em branco pois houve erro
} // if (FlagErr == 0)
}
catch (Exception e)
{
FlagErr = 1;
MsgErr = "Erro: Não foi possível enviar o lote de NF-e à SEFAZ. " + e.Message + " - " + e.StackTrace.ToString();//"Erro: Não foi possível enviar o lote de NF-e à SEFAZ. " + e.Message + "\n" + e.InnerException.ToString() + "\n" + e.StackTrace.ToString();
return "";
}
}
Beauty... Communication with Sefaz is performed and the note authorized (if you consult the access key, it will be there normally) But within the WS method, when "Invoke" is performed, an empty object is returned.
At the webservice, it’s on this line:
object[] results = this.Invoke("NfeAutorizacaoLote", new object[] {
nfeDadosMsg});
Results[] returns an object with no values...
I have this difficulty because I needed the return XML to update the NF-e on my system.
I wonder what I’m doing wrong in this call or in the instantiation of return?
For help, I am providing the video of the operation with breakpoints:
https://www.dropbox.com/s/xyj4l82k7djhxbq/Difference%20SeFaz%20MG%20Retorno.camrec? dl=0
And I’m making available the demonstrated code part:
https://www.dropbox.com/s/d2ndqa4nos4p72z/BibliotecaNF310.7z?dl=0
Thank you in advance!
I did, Hub. I even sent you some e-mails with replies and even a video with the operation. I made the change you said and are presenting the message "Object reference not set to an instance of an object", as already reported.
– Thales
See updated reply @Thales
– rubStackOverflow
Thanks for the answer, @Hub.
– Thales
It worked @Hub! Thank you very much.
– Thales
You’re welcome @Thales
– rubStackOverflow