Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 29-03-2017
dtovar8a dtovar8a is offline
Registrado
NULL
 
Registrado: ene 2017
Posts: 2
Poder: 0
dtovar8a Va por buen camino
Fin prematuro del archivo

Buenos días,
En el caso de la construcción del XML he optado por su creación manual. En este sentido no tengo ningún problema, puedo subir manualmente el fichero desde el portal de AEAT con su certificado y pasa correctamente, puediendo ver la factura subida desde la consulta de facturas.

El problema viene cuando intento subir dicho archivo mediante C# o VB.

He utilizado diferentes mecanismos, y en ambos me encuentro varios problemas:
  1. Utilizando HttpWebRequest, aparece el error "Fin prematuro del archivo".
    Comenta @CMB que puede ser problema del fichero y que al abrir con un explorador me indicará la línea/columna del error, pero el fichero abre correctamente, de hecho, como he dicho antes, lo he subido sin problemas desde el portal.
    El código que utilizo es el que utiliza @angelhorse:
    Código:
        Public Sub sendXML(_subjectname As String, _filepath As String)
            subjectName = _subjectname
            filepath = _filepath
    
            Dim req As HttpWebRequest
            Dim url As String = "https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
            'inicializar propiedades request--------------------------------
            req = HttpWebRequest.Create(url)
            req.Headers.Add("SOAP:Action")
            req.ContentType = "text/xml;charset=""utf-8"""
            req.Accept = "text/xml"
            req.Method = "POST"
    
            Dim soapEnvelopeXml As XmlDocument = New XmlDocument()
            soapEnvelopeXml.Load(_filepath)
    
            cert = New X509Certificate2("c:\Temp\certificado.pfx", "12345")
            req.ClientCertificates.Add(cert)
    
            Dim rest As WebResponse = req.GetResponse()
    
            Dim reader As StreamReader = New StreamReader(rest.GetResponseStream())
            soapResult = reader.ReadToEnd()
        End Sub
    ¿Que está ocurriendo?
  2. Utilizando la clase siiService, creada a partir del WS y cambianado inheerits por: Microsoft.Web.Services3.WebServicesClientProtocol, como describe @batuzail.
    Los pasos que sigo son los siguientes:
    • Agrego a referencias de mi proyecto "Microsoft.Web.Services3"
    • Utilizo la siguiente instrucción para generar la clase siiService a partir del servicio web:
      Código:
      wsdl https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl /language=VB
      Una vez generada la clase, la edito y cambio
      Código:
      Partial Public Class siiService
          Inherits System.Web.Services.Protocols.SoapHttpClientProtocol
      por
      Código:
      Partial Public Class siiSuministroFactEmitidas
          Inherits Microsoft.Web.Services3.WebServicesClientProtocol
    • Importo a mi proyecto la clase recién generada
    • Agrego la referencia al servico web para tener acceso a los datasets y la llamo SuministroFactEmitidas
    • Añado los siguientes imports:
      Código:
      Imports System.IO
      Imports System.Security.Cryptography.X509Certificates
      Imports System.Xml.Serialization
      Imports Microsoft.Web.Services3
      Imports Microsoft.Web.Services3.Security
      Imports Microsoft.Web.Services3.Security.Tokens
    • Añado el siguiente código
      Código:
          Private Sub send()
      
              Try
                  cert = findCertificate()
                  Dim signatureToken As X509SecurityToken = New X509SecurityToken(cert)
                  Dim sig As New MessageSignature(signatureToken)
      
                  Dim webserviceProxy As New siiSuministroFactEmitidas
                  webserviceProxy.ClientCertificates.Add(cert)
      
                  Dim requestContext As SoapContext = webserviceProxy.RequestSoapContext
                  requestContext.Security.Tokens.Add(signatureToken)
                  requestContext.Security.Timestamp.TtlInSeconds = 60
                  requestContext.Security.Elements.Add(sig)
      
                  Dim suministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
      
                  Dim xmlSerializer As New XmlSerializer(suministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")
      
                  Using reader As New FileStream(filepath, FileMode.Open)
                      suministroLRFacturasEmitidas = CType(xmlSerializer.Deserialize(reader), SuministroLRFacturasEmitidas)
                  End Using
      
                  Dim resp As SuministroFactEmitidas.RespuestaLRFEmitidasType
      
                  webserviceProxy.SuministroLRFacturasEmitidas(suministroLRFacturasEmitidas)
      
              Catch ex As Exception
                  Console.WriteLine(ex.ToString())
              End Try
      
          End Sub
      No tengo ningún error de compilación, pero al ejecutarlo aparece un error en tiempo de ejecución en la siguiente línea:
      Código:
      Dim webserviceProxy As New siiSuministroFactEmitidas
      con el error "URI no válido: no se puede determinar el formato del URI."
¿Alguien podría darme algo de luz por alguna de las dos vías?

Gracias
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4170 Hace 1 Semana 17:29:05
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 21:45:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi