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 originalFunction llamadaServicioWEB(xmlSOAP)
Dim oSOAPprov
Dim strURL, SoapServer, SoapPath
strURL = "https://www.proveedor.com/carpetaServ/axis/ElServicio?wsdl"
SoapServer = "www.proveedor.com"
SoapPath = "/carpetaServ/axis/ElServicio?wsdl"
Set oSOAPprov = Server.CreateObject("MSXML2.ServerXMLHTTP")
oSOAPprov.Open "POST", strURL, False
oSOAPprov.setRequestHeader "Man", "POST " & SoapPath & " HTTP/1.1"
oSOAPprov.setRequestHeader "Host", SoapServer
oSOAPprov.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
oSOAPprov.setRequestHeader "SOAPAction", "https://www.proveedor.com/carpetaServ/axis/ElServicio"
oSOAPprov.Send(xmlSOAP)
Set xmlSOAP = nothing
Dim xmlRespuesta, strRespuesta
If oSOAPprov.status = 200 Then '200 = STATUS OK
Set xmlRespuesta = Server.CreateObject("Microsoft.XMLDOM")
xmlRespuesta.loadXML(oSOAPprov.ResponseText)
' ==== ANALIZAR RESPUESTA SEGUN CADA CASO ====
Set xmlRespuesta = nothing
Else
'Si status <> 200 no puede analizar la respuesta
strRespuesta = "Error " & oSOAPprov.status & ": " & errServerXMLHTTP(oSOAPprov.status)
End If
Set oSOAPprov = nothing
llamadaServicioWEB = strRespuesta
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 originaloSOAPprov.setRequestHeader "Man", "POST " & SoapPath & " HTTP/1.1"
oSOAPprov.setRequestHeader "Host", SoapServer
oSOAPprov.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
oSOAPprov.setRequestHeader "SOAPAction", "https://www.proveedor.com