2011-07-21 12 views
6

SOAPを使用して従来のASPから.Net Webサービスを呼び出そうとしています。私はテストとして次のコードをビルドし、400 Bad Requestエラーで空のreponsebodyを取得しています。間違ったことをやっているのですか。この問題は.Net側にあるのでしょうか?SOAPを使用して従来のASPから.Net Webサービスメソッドを呼び出す方法

'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

私はSOAPエンドタグと一致しないsoap12タグを持つフォーマットの悪いXMLを見る。しかし、それは問題ではありません。実際のバージョンのコードでは良い結果が得られません。 – crackedcornjimmy

+0

' 'のタイプとフォーマットは' Now() 'のものと一致しますか? – Filburt

答えて

2

次の解決策が私の問題の答えです。 Filburtは、実際に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 = "[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 

私は、URLのオフ「?WSDL」を取り、封筒を少し変更し、それが機能するようになりました。 SoapMethodNameヘッダーの設定も削除しました。

+0

'?wsdl'を削除し、' localhost'が本当にあなたのスキーマ名前空間であるかどうかは私の次の質問です;-) – Filburt

関連する問題