AYUDA: XmlSerializer bastante lento. VB/C#

Y para empezar Que es una Factura Electronica? Como empiezo? Necesito Autorizacion? Que medios hay para Facturar Electronicamente? estos y todos los temas de iniciacion deberan estar aqui
MartinSosa
Mensajes: 7
Registrado: Sab Abr 22, 2017 8:46 pm

AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor MartinSosa » Sab Abr 22, 2017 9:21 pm

Bueno amigos, les comento mi situacion, estoy desarrollando un software para la facturacion v3.3 en MVC de ASP.NET y tuve problemas para compilar la clase cfdv33.cs desde el archivo cfdv.xsd y vine a encontrar la solucion nada mas y nada menos que en este foro, ahora me ecuentro en un nuevo problema y no he encontrado informacion al respecto por ningun lado a excepcion de otra persona que tiene el mismo problema pero en VB, escribo este nuevo tema con la esperanza de que puedan ayudarme, les explico:

Una vez que lleno el objeto del tipo Comprobante, al momento de inicializar una nueva instancia del XmlSerializer tarda 5 minutos! y posteriormente al momento de serializar el objeto Comprobante en un archivo XML tarda 2 minutos! y esto de verdad es bastante tiempo, espero y puedan ayudarme de verdad lo agradeceria mucho. Anexo mi codigo:

Código: Seleccionar todo

Comprobante objCompXSD = new Comprobante();

// Nodo comprobante
objCompXSD.Version = "3.3";
objCompXSD.Serie = "MAQ";
objCompXSD.Folio ="1";
objCompXSD.Fecha = Convert.ToDateTime(DateTime.Now.ToString("s"));
objCompXSD.FormaPago = c_FormaPago.Item01;
objCompXSD.SubTotal = Convert.ToDecimal("1000");
objCompXSD.Moneda = c_Moneda.MXN;
objCompXSD.Total = Convert.ToDecimal("1160");
objCompXSD.TipoDeComprobante = c_TipoDeComprobante.I;
objCompXSD.MetodoPago = c_MetodoPago.PUE;
objCompXSD.LugarExpedicion = c_CodigoPostal.Item84000;

// Nodo emisor
objCompXSD.Emisor = new ComprobanteEmisor();
objCompXSD.Emisor.Rfc = "AAA010101AAA";
objCompXSD.Emisor.Nombre = "EMPRESA, S.A.DE C.V.";
objCompXSD.Emisor.RegimenFiscal = c_RegimenFiscal.Item601;

// Nodo receptor
objCompXSD.Receptor = new ComprobanteReceptor();
objCompXSD.Receptor.Rfc = "AAA012101AAA";
objCompXSD.Receptor.Nombre = "NOMBRE";
objCompXSD.Receptor.UsoCFDI = c_UsoCFDI.G01;

// Nodo conceptops
objCompXSD.Conceptos = new ComprobanteConcepto[1]; // Numero de Filas
objCompXSD.Conceptos[0] = new ComprobanteConcepto(); // Instancia de la Fila
objCompXSD.Conceptos[0].ClaveProdServ = c_ClaveProdServ.Item43231500;
objCompXSD.Conceptos[0].Cantidad = 1;
objCompXSD.Conceptos[0].ClaveUnidad = c_ClaveUnidad.C62;
objCompXSD.Conceptos[0].Unidad = "Software";
objCompXSD.Conceptos[0].Descripcion = "Programacion de software";
objCompXSD.Conceptos[0].ValorUnitario = 1;
// [0] Debe aumentar para el siguiente Concepto
               
// Impuestos
objCompXSD.Impuestos = new ComprobanteImpuestos();
objCompXSD.Impuestos.TotalImpuestosTrasladadosSpecified = true; // Estatus si aparece
objCompXSD.Impuestos.TotalImpuestosTrasladados = 222;

// Impuestos Traslados
objCompXSD.Impuestos.Traslados = new ComprobanteImpuestosTraslado[1];
objCompXSD.Impuestos.Traslados[0] = new ComprobanteImpuestosTraslado();
objCompXSD.Impuestos.Traslados[0].Importe = 160;
objCompXSD.Impuestos.Traslados[0].TasaOCuota = c_TasaOCuota.Item0059100;
objCompXSD.Impuestos.Traslados[0].Impuesto = c_Impuesto.Item002;
// Complemento
// objCompXSD.Complemento = new ComprobanteComplemento();

// Creas los namespaces requeridos
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3");
xmlNameSpace.Add("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlNameSpace.Add("schemaLocation", "cfdv33.xsd");

// Creas una instancia de XMLSerializer con el tipo de dato Comprobante
XmlSerializer xmlSerialize = new XmlSerializer(typeof(Comprobante));//   <---- AQUI TARDA 5 MINUTOS

// Creas una instancia de XmlTextWriter donde se va a guardar el resultado de la serialización
XmlTextWriter xmlTextWriter = new XmlTextWriter(@"C:\xml\comprobanteSinTimbrar.xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;

// Y serializas…
xmlSerialize.Serialize(xmlTextWriter, objCompXSD);//   <----- Y AQUI TARDA 2 MINUTOS

xmlTextWriter.Close();
MessageBox.Show("Listo!");

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor Dado » Dom Abr 23, 2017 2:26 am

Yo no se programar en VB/C# pero creo saber porque tarda tanto

De casualidad estas haciendo la serializacion basandose en los archivos publicados por el SAT de forma que los archivos son cargador en linea, es decir, accesas a los archivos mediante http://xxxx.xsd ?

Estoy casi seguro que si y lo que debes hacer es descargar esos archivos y hacer que los accese de forma local y no por el protocolo http:
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

MartinSosa
Mensajes: 7
Registrado: Sab Abr 22, 2017 8:46 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor MartinSosa » Lun Abr 24, 2017 10:31 am

DADO escribió:Yo no se programar en VB/C# pero creo saber porque tarda tanto

De casualidad estas haciendo la serializacion basandose en los archivos publicados por el SAT de forma que los archivos son cargador en linea, es decir, accesas a los archivos mediante http://xxxx.xsd ?

Estoy casi seguro que si y lo que debes hacer es descargar esos archivos y hacer que los accese de forma local y no por el protocolo http:


Que tal, buen dia, en efecto tengo los archivos locales y aun asi sigue tardando...

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor s3cr3to » Lun Abr 24, 2017 1:43 pm

Comprueba que realmente no estas haciendo referencia a los archivos por Internet.
Por ejemplo, si tienes bien estructurado tu código:
1) Quita el acceso a Internet de tu Pc donde estas desarrollando
2) Corre tu aplicación:
2.a) si logra generar el XML sin uso de Internet, vas bien, (y lo lento quien sabe porque será)
2.b) si continua lento, no estas haciendo uso del Tip que te dio DADO (aquí esta lo lento)

No se que hace tu aplicación pero al menos debe tronar solo cuando intente timbrar (es decir debe necesitar de Internet).

MartinSosa
Mensajes: 7
Registrado: Sab Abr 22, 2017 8:46 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor MartinSosa » Mar Abr 25, 2017 7:43 pm

Bien acabo de hacer la prueba sin conexion a internet y listo, si genera todo el xml en cuestion de milisegundos, ahora solo me queda una duda:
Como es que puedo poner todo local? si ya tengo descargados y en la misma carpeta todos los archivos, e visto que los namespaces si los saca de un http pero si se lo quito me marca errores, como deberia declarar esos namespaces?
Aqui el codigo de cfdv33.xsd:

Código: Seleccionar todo

<xs:schema xmlns:cfdi="3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:catCFDI="http://www.sat.gob.mx/sitio_internet/cfd/catalogos" xmlns:tdCFDI="http://www.sat.gob.mx/sitio_internet/cfd/tipoDatos/tdCFDI" targetNamespace="http://www.sat.gob.mx/cfd/3" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:import namespace="http://www.sat.gob.mx/sitio_internet/cfd/catalogos" schemaLocation="catCFDI.xsd"/>
  <xs:import namespace="http://www.sat.gob.mx/sitio_internet/cfd/tipoDatos/tdCFDI" schemaLocation="tdCFDI.xsd"/>

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor Dado » Mar Abr 25, 2017 7:58 pm

Puedo decir............"te lo dijimos" je je je
(la idea de s3cr3to fue muy buena para tener, sin lugar a dudas, la certeza que estabas accesando archivos por http:)

Poner todo local es muy facil, por ejemplo la siguiente linea :

Código: Seleccionar todo

<xs:import namespace="http://www.sat.gob.mx/sitio_internet/cfd/catalogos" schemaLocation="catCFDI.xsd"/>


cambiala a :

Código: Seleccionar todo

<xs:import namespace="c:\mi ruta\esquemas" schemaLocation="catCFDI.xsd"/>


y por supuesto en c:\mi ruta\esquemas debes descargar y grabar el archivo catCFDI.xsd
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

MartinSosa
Mensajes: 7
Registrado: Sab Abr 22, 2017 8:46 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor MartinSosa » Mar Abr 25, 2017 8:27 pm

Gracias por tu respuesta, los http de esta linea:

Código: Seleccionar todo

<xs:schema xmlns:cfdi="3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:catCFDI="http://www.sat.gob.mx/sitio_internet/cfd/catalogos" xmlns:tdCFDI="http://www.sat.gob.mx/sitio_internet/cfd/tipoDatos/tdCFDI" targetNamespace="http://www.sat.gob.mx/cfd/3" elementFormDefault="qualified" attributeFormDefault="unqualified">


los dejo tal cual?

y otra duda, mis archivos los tengo en la raiz del disco "D:" lo estoy poniendo de esta manera y de todos modos me marca error:

Código: Seleccionar todo

<xs:import namespace="D:\" schemaLocation="catCFDI.xsd"/>
<xs:import namespace="D:\" schemaLocation="tdCFDI.xsd"/>

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor Dado » Mar Abr 25, 2017 8:51 pm

Si, los que empiecen con xmlns dejalos tal cual

Sabes, creo que si estoy mal, deberia ser asi :

Código: Seleccionar todo

<xs:import namespace="http://www.sat.gob.mx/sitio_internet/cfd/catalogos" schemaLocation="D:\catCFDI.xsd"/>


Es decir, hay que respetar los namespace, pero solo cambiar los schemalocation

(Una disculpa por no darte 100% la respuesta a la primera, como te decia yo no programo en VB/C# pero trato de ayudar en lo que creo que puede ser la solucion)
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

MartinSosa
Mensajes: 7
Registrado: Sab Abr 22, 2017 8:46 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor MartinSosa » Mar Abr 25, 2017 9:46 pm

Ahora tarda mucho mas amigo, ya estoy desesperado x_x

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: AYUDA: XmlSerializer bastante lento. VB/C#

Mensajepor Dado » Mar Abr 25, 2017 11:44 pm

OK, esta es mi teoria, igual estoy mal, pero depende de ti confirmarla :

Al inicio, cuando apenas publicaste tu problema, tu sistema estaba descargando de internet y procesando esos pesados catalogos, me refiero a los import catCFDI.xsd y tdCFDI.xsd ......... y tardaba mucho en procesar

Cuando desconectaste internet tu sistema ya NO pudo acceder a esos dos catalogos y en milisegundos pudiste crear el XML

Ahora, cuando cambiaste el schemalocation a local volvio a tardar muchisimo, si funciono el cambio que hiciste y tu sistema ahora si pudo encontrar de forma local esos xsd ........ pero volvio a tardar muchisimo en procesar

Mi conclusion es que los que te estan creando una laguna de tiempo de proceso son los catalogos mencionados

Asi que intenta BORRAR O POR LO MENOS RENOMBRAR los catCFDI.xsd y tdCFDI.xsd y haz pruebas, estoy casi seguro que eliminando la referencia a esos dos puedes volver a procesar de volada.

MIRA, por lo menos ya tienes un momento en el que si proceso en milisegundos, a partir de ahi trata de analizar que es lo que cambia que vuelve a tardar mucho
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!


Volver a “Iniciando con la Factura Electronica”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados