Foros del Web » Programando para Internet » ASP Clásico »

Recuperar archivo adjunto de un XML desde ASP

Estas en el tema de Recuperar archivo adjunto de un XML desde ASP en el foro de ASP Clásico en Foros del Web. Muy buenas amigos! Llevo varias horas pateando internet pero no consigo encontrar algo que se acerque a la solución de mi problema. He creado un ...
  #1 (permalink)  
Antiguo 01/10/2008, 05:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Recuperar archivo adjunto de un XML desde ASP

Muy buenas amigos!

Llevo varias horas pateando internet pero no consigo encontrar algo que se acerque a la solución de mi problema.

He creado un cliente para un servicio web por soap, de tal manera que cuando le realizo la petición me responde perfectamente, el caso es que la respuesta es un archivo que envía como adjunto al mensaje XML, y no encuentro la forma de recuperarlo desde ASP, el mensaje que me devuelve es el siguiente:


--MIMEBoundaryurn_uuid_9C2BADA59E5BB9329B12228609603 69 Content-Type: text/xml; charset=utf-8 Content-Transfer-Encoding: 8bit Content-ID: <0.urn:uuid:9C2BADA59E5BB9329B1222860960370@apache .org> 1142 --MIMEBoundaryurn_uuid_9C2BADA59E5BB9329B12228609603 69 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-ID: PK


Y la respuesta de SOAP vista desde el SOAP Monitor es esta:


<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:downloadResponse xmlns:ns="http://ws.XXXXXXX.net"><ns:return><cod_descarga xmlns="http://ws.XXXXXXXX.net">1142</cod_descarga></ns:return></ns:downloadResponse></soapenv:Body></soapenv:Envelope>


El codigo que tengo es basicamente:


Código:
<%

(Formo la cadena XML: XMLstring)

dim xmlhttp
Set xmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

xmlhttp.send(XMLstring)
	
if xmlhttp.Status = 200 then	

dim xmlRespuesta		
Set xmlRespuesta = Server.CreateObject("Microsoft.XMLDOM")
		
xmlRespuesta.async = False

xmlRespuesta.loadXML (xmlhttp.ResponseText)	
		
dim oNode

set oNode = xmlRespuesta.selectSingleNode("soap:Envelope/soap:Body/" & SoapAction & "Response/" & SoapAction & "Result")
			
%>

Teneis alguna idea del codigo necesario para guardar el adjunto?

Muchisimas gracias por adelantado!
  #2 (permalink)  
Antiguo 01/10/2008, 17:22
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Recuperar archivo adjunto de un XML desde ASP

Hola,

Nunca lo he hecho, se que Myakire tiene experiencia con esto, a ver si el te puede iluminar, mientras tanto revisa este link para mí es consumir el webservice y ver que métodos puedes utilizar para extraer ese xml, después parsearlo con el XMLDOM.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 02/10/2008, 03:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Recuperar archivo adjunto de un XML desde ASP

Gracias por la ayuda u_Goldman, les he echado un vistazo pero no he solucionado el problema, lo que necesito es como recuperar el archivo binario de la respuesta soap y guardarlo en el disco, de hecho he probado a hacer un Response.Binarywrite xmlhttp.responseBody me devuelve lo que "creo" (y repito, solo creo =S) la información del archivo, porque en alguna linea consigo leer 1142.dxf, que es el archivo que tengo que guardar.

Espero que alguien haya hecho alguna vez algo parecido y pueda ayudarme, porque he buscado por todo internet de mil formas y no consigo dar con algo que se le parezca.
  #4 (permalink)  
Antiguo 03/10/2008, 06:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Solucionado!

Al fin, lo he conseguido, como casi siempre (por no decir siempre) la solucion era muchisimo más facil de lo que parecía, si os fijais, las diferencias con el primer código son minimas, pero es la diferencia entre funcionar y no

Comparto el código con vosotros por si algun dia alguien necesitase este ejemplo:


Código:
Dim XMLstring,xmlhttp
	
	Response.Buffer = True
	Set xmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
	
	' Forma la cadena de petición SOAP
	XMLstring =	"<?xml version=""1.0"" encoding=""utf-8""?>" & _
				"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " & _
				"xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" " & _
				"xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & _
				"<soap:Body>" & _
				"<" & Soap_Action & " xmlns=""" & Soap_Namespace & """>" & _
				"<campo>" & valor& "</campo>" & _
				
				"</" & Soap_Action & ">" & _
				"</soap:Body>" & _
				"</soap:Envelope>"
	
	' Añade la información de la cabecera
	xmlhttp.Open "POST", "http://" & Soap_Server & Soap_Path, False
	xmlhttp.setRequestHeader "Man", "POST " & Soap_Path & " HTTP/1.1"
	xmlhttp.setRequestHeader "Host", Soap_Server
	xmlhttp.setRequestHeader "Content-Type", "application/zip" 
	xmlhttp.setRequestHeader "SOAPAction", Soap_Namespace & Soap_Action

	xmlhttp.send(XMLstring)
	
	
	' Añade una cabecera para darle un nombre:
	Response.AddHeader "Content-Disposition","attachment;filename=File.zip"
	
	' Especifica el tipo de contenido para decirle al explorador qué hacer:
	Response.ContentType = "application/zip"
	
	' Manda los datos al explorador
	Response.BinaryWrite xmlhttp.responseBody
Basicamente, es que en el anterior código por un despiste le indicaba en la cabecera que la respuesta era texto, por lo tanto me lo mostraba como texto en el explorador, al indicarle bien el tipo de fichero que devolvia y enviar la respuesta al explorador, éste ultimo lo interpretó perfectamente y abrió el dialogo de descarga.

Muchisimas gracias por las respuestas!

Hasta pronto
  #5 (permalink)  
Antiguo 03/10/2008, 10:58
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Recuperar archivo adjunto de un XML desde ASP

Que bueno que lo solucionaste y ahi queda para quien lo necesite, seguramente habras ayudado a mas de uno.

Gracias
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.