Cita:
Empezado por bartag
Te pongo el código que utilizo. Básicamente lo que hace es tomar un archivo xml y lo envía. Debes por favor cumplimentar previamente los campos de dicho archivo pues en caso contrario te dará errores de validación.
Código:
' ----------------------------------------------------------------------------------------
Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store("My")
store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)
Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2
For Each x In store.Certificates
ListCert = ListCert & vbNewLine
Next
'RichTextBox1.Text = ListCert
CertificadoCorrecto = store.Certificates(CInt(TextBoxNumeroOrdenCertificado.Text)) '(5)
' Objeto que almacenara la respuesta de la funcion del Web Service
Dim resp As New ServiceReference1.RespuestaLRFEmitidasType
' Ws
Dim Ws As New ServiceReference1.siiSOAPClient
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True
' Asignamos el certificado:
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
' ----------------------------------------------------------------------------------------
' ----------------------------------------------------------------------------------------
Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
'--------------------------------------------------------------------------
Try
Dim x As New XmlSerializer(_SuministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")
' A FileStream is needed to read the XML document.
Dim filename As String = "facturaEmitidaMODEL.XML"
Using reader As New FileStream(filename, FileMode.Open)
_SuministroLRFacturasEmitidas = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)
End Using
' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
' SOBREESCRIBIMOS DATS FORM ANTES SEND:
_SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
_SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)
'(...)
'// se hace la llamada a la funcion suministrada por el WS
resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)
Catch ex As Exception
MsgBox(ex.Message)
Respuesta2RichTextBox = ex.Message
Finally
'Me.Cursor = Cursors.Default
'Threading.Thread.Sleep(5000)
'ProgressBar1.Style = ProgressBarStyle.Continuous
''ProgressBar1.Value = ProgressBar1.Maximum
End Try
Te adjunto también el archivo xml que debes cumplimentar donde indica '[A CUMPLIMENTAR]'.
Con esto, se toma la factura del archivo (fíjate que solamente tiene el nodo '<SuministroLRFacturasEmitidas>' y nada del encabezado SOAP para que no dé error al aplicar el Deserialize) y nos la convierte en un objeto serializado donde podemos acceder a los campos de la clase antes de enviar si lo deseamos; en caso contrario se envía y la propia llamada se encarga de insertar las cabeceras, los namespaces, etc.
|
Hola bartag,
estoy atascada en este tema también, a ver si me puedes ayudar....aunque mi codigo es C#...
genero dinamicamente un fichero xml:
xmlWriter = new XmlTextWriter(nombrefichero, Encoding.UTF8);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 4;
xmlWriter.WriteRaw("<?xml version='1.0' encoding='UTF-8'?>");
xmlWriter.WriteStartElement("soapenv:Envelope");
xmlWriter.WriteAttributeString("xmlns", "soapenv", null, "...schemas.xmlsoap.org/soap/envelope/");
xmlWriter.WriteAttributeString("xmlns", "siiLR", null, "....agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd");
xmlWriter.WriteAttributeString("xmlns", "sii", null, "....agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd");
xmlWriter.WriteStartElement("soapenv:Header");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("soapenv:Body");
xmlWriter.WriteStartElement("siiLR:SuministroLRFacturasEmitidas");
.
.
.
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
.
.
.
System.IO.FileStream fStream = new System.IO.FileStream(nombrefichero, System.IO.FileMode.Open);
SuministroFactEmitidas.SuministroLRFacturasEmitidas oSfe = new SuministroFactEmitidas.SuministroLRFacturasEmitidas();
oSfe = (SuministroFactEmitidas.SuministroLRFacturasEmitidas)oXmlSerializer.Deserialize(fStream);
me da error
Error en el documento XML (2, 2).
No se esperaba <Envelope xmlns='...schemas.xmlsoap.org/soap/envelope/'>.
que estoy haciendo mal???
Gracias
Un saludo