2011-07-21 15 views
6

Próbuję wywołać usługę sieci Web .Net z klasycznej ASP przy użyciu protokołu SOAP. Zbudowałem następujący kod jako test i wracam do pustego repozydenta z błędem 400 złych żądań. Czy robię coś złego, czy może ten problem dotyczy strony .Net?Jak wywołać metodę usługi sieci Web .Net z klasycznej ASP przy użyciu protokołu 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

Ups. Widzę źle sformatowany plik XML z tagiem soap12, który nie pasuje do tagu końcowego SOAP. Ale to nie ma znaczenia. To prawda w prawdziwej wersji mojego kodu bez dobrych wyników. – crackedcornjimmy

+0

Jaki typ (i format) to '' i czy pasuje do tego, co otrzymałeś z 'Teraz()'? – Filburt

Odpowiedz

2

Następujące rozwiązanie było odpowiedzią na mój problem. I Filburt, gdy rzeczywiście wykonałem dobrą rozmowę SOAP, odkryłem, że twoje pytanie jest wysoce legalne. Typ i format miały ogromne znaczenie!

'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 

wziąłem „? WSDL” off url i zmienił kopertę trochę i działa teraz. Usunąłem również ustawienie nagłówka SoapMethodName.

+0

Usunięcie '? Wsdl' i czy' localhost' jest tak naprawdę obszarem nazw schematu byłoby moimi następnymi pytaniami ;-) – Filburt

Powiązane problemy