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. Gracias por tus aportaciones, me han aclarado bastante el tema.
Estoy intentando usar tu código pero tengo un problema cuando hago el Deserialize sobre el XML modelo que has adjuntado. Me da un error "There is an error in XML document (2, 2)", ¿sabes a qué puede ser debido?
Gracias.