Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/09/2008, 02:01
Avatar de PosProdukcion
PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años
Puntos: 9
Respuesta: Invocar función dentro de un servicio web desde ASP

Hace tiempo que logré solucionarlo, pero tardé en poner aquí la solución, por si le interesa a alguien.

Para codificar SOAP ENVELOPE en estilo RPC/Encoded o en otros estilos puedes leer esta documentación.

Para invocar un servicio web desde ASP Clásico, puedes usar esto:

Código asp:
Ver original
  1. Function llamadaServicioWEB(xmlSOAP)
  2.         Dim oSOAPprov
  3.         Dim strURL, SoapServer, SoapPath
  4.  
  5.         strURL = "https://www.proveedor.com/carpetaServ/axis/ElServicio?wsdl"
  6.         SoapServer = "www.proveedor.com"
  7.         SoapPath = "/carpetaServ/axis/ElServicio?wsdl"
  8.  
  9.         Set oSOAPprov = Server.CreateObject("MSXML2.ServerXMLHTTP")
  10.  
  11.         oSOAPprov.Open "POST", strURL, False
  12.  
  13.         oSOAPprov.setRequestHeader "Man", "POST " & SoapPath & " HTTP/1.1"
  14.         oSOAPprov.setRequestHeader "Host", SoapServer
  15.         oSOAPprov.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
  16.         oSOAPprov.setRequestHeader "SOAPAction", "https://www.proveedor.com/carpetaServ/axis/ElServicio"
  17.  
  18.         oSOAPprov.Send(xmlSOAP)
  19.         Set xmlSOAP = nothing
  20.  
  21.         Dim xmlRespuesta, strRespuesta
  22.         If oSOAPprov.status = 200 Then '200 = STATUS OK
  23.             Set xmlRespuesta = Server.CreateObject("Microsoft.XMLDOM")
  24.             xmlRespuesta.loadXML(oSOAPprov.ResponseText)
  25.  
  26.             ' ==== ANALIZAR RESPUESTA SEGUN CADA CASO ====
  27.  
  28.             Set xmlRespuesta = nothing
  29.         Else
  30.             'Si status <> 200 no puede analizar la respuesta
  31.             strRespuesta = "Error " & oSOAPprov.status & ": " & errServerXMLHTTP(oSOAPprov.status)
  32.         End If
  33.         Set oSOAPprov = nothing
  34.        
  35.         llamadaServicioWEB = strRespuesta
  36.     End Function

Acerca de las líneas siguientes, son imprescindibles para establecer las cabeceras del paquete HTTP, si no se ponen, el servicio devolverá el error "NO SOAP-Action Header"

Código asp:
Ver original
  1. oSOAPprov.setRequestHeader "Man", "POST " & SoapPath & " HTTP/1.1"
  2. oSOAPprov.setRequestHeader "Host", SoapServer
  3. oSOAPprov.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
  4. oSOAPprov.setRequestHeader "SOAPAction", "https://www.proveedor.com

Última edición por PosProdukcion; 25/09/2008 a las 06:09