2011-07-21 22 views
6

Estoy intentando llamar a un servicio web .Net desde ASP clásico utilizando SOAP. He creado el siguiente código como prueba y sigo obteniendo un cuerpo de respuesta vacío con un error de 400 solicitudes erróneas. ¿Estoy haciendo algo mal o podría este problema estar en el lado .Net?Cómo llamar a un método de servicio web .Net desde ASP clásico utilizando SOAP

'set up xmlhttp to checkout server 
Dim oRequest 
Set oRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") 

'setting this option will allow ServerXMLHTTP to ignore the certificate errors it encounters. 
oRequest.setOption(2) = SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS 


' resolve, connect, send, receive - in milliseconds 
oRequest.setTimeouts 10000, 10000, 10000, 10000 

'set the URL 
msURL = "[redacted]" 

msSOAP = "<?xml version=""1.0"" encoding=""utf-8"" ?>" 
msSOAP = msSOAP & "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" 
msSOAP = msSOAP & "<SOAP:Body>" 
msSOAP = msSOAP & "<[Some Service] xmlns=""http://localhost"">" 
msSOAP = msSOAP & "<MethodName>" 
msSOAP = msSOAP & "<methodParam1>[some value]</methodParam1>" 
msSOAP = msSOAP & "<methodParam2>[some value]</methodParam2>" 
msSOAP = msSOAP & "<methodParam3>[some value]</methodParam3>" 
msSOAP = msSOAP & "</MethodName>" 
msSOAP = msSOAP & "</[Some Service]>" 
msSOAP = msSOAP & "</SOAP:Body>" 
msSOAP = msSOAP & "</soap12:Envelope>" 

oRequest.Open "POST", msURL, False 
oRequest.setRequestHeader "Content-Type", "text/xml" 
oRequest.setRequestHeader "SOAPMethodName", "[MethodName]" 
oRequest.setRequestHeader "SOAPAction", "[Some Url]" 
oRequest.send msSOAP 

Response.Write oRequest.ResponseBody 
+0

Vaya. Veo el XML mal formateado con la etiqueta soap12 que no coincide con la etiqueta final SOAP. Pero, eso no importa. Es correcto en la versión real de mi código sin buenos resultados. – crackedcornjimmy

+0

¿Qué tipo (y formato) es '' y coincide con lo que obtienes de 'Now()'? – Filburt

Respuesta

2

La siguiente solución fue la respuesta a mi problema. Y Filburt, una vez que realicé una buena llamada SOAP, descubrí que tu pregunta era muy legítima. ¡El tipo y el formato importaban mucho!

'set up xmlhttp to checkout server 
Dim oRequest 
Set oRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") 

'setting this option will allow ServerXMLHTTP to ignore the certificate errors it encounters. 
oRequest.setOption(2) = SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS 

' resolve, connect, send, receive - in milliseconds 
oRequest.setTimeouts 10000, 10000, 10000, 10000 

'set the URL 
msURL = "[Service Url]" 

msSOAP = "<?xml version=""1.0"" encoding=""utf-8"" ?>" 
msSOAP = msSOAP & "<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"">" 
msSOAP = msSOAP & "<s:Body>" 
msSOAP = msSOAP & "<[MethodName] xmlns=""[Some Namespace]"">" 
msSOAP = msSOAP & "<methodParam1>[Some value]</methodParam1>" 
msSOAP = msSOAP & "<methodParam2>[Some value]</methodParam2>" 
msSOAP = msSOAP & "<methodParam3>[Some value]</methodParam3>" 
    msSOAP = msSOAP & "</MethodName>" 
msSOAP = msSOAP & "</s:Body>" 
msSOAP = msSOAP & "</s:Envelope>" 

oRequest.Open "POST", msURL, False 
oRequest.setRequestHeader "Content-Type", "text/xml" 
oRequest.setRequestHeader "SOAPAction", "[Some Url]" 
oRequest.send msSOAP 

tomé el "? Wsdl" fuera de la url y le cambió el sobre un poco y funciona ahora. También eliminé la configuración del encabezado SoapMethodName.

+0

Quitando '? Wsdl' y si' localhost' es realmente su espacio de nombres de esquema hubiera sido mi siguiente pregunta ;-) – Filburt

Cuestiones relacionadas