3

これについての助けをいただければ幸いです。私はここ数日間それに取り組んできました。

以下は、これまでに取得したコードです。残念ながら、実行すると HTTP 415 エラーが発生します。コンテンツ タイプが 'text/xml; であるため、メッセージを処理できません。charset=UTF-8' は、予期されたタイプ 'application/soap+xml;' ではありませんでした。charset=utf-8' .

application/soap+xml の content-type を送信する必要があります。これは、Web サービスで許可されている唯一のタイプであるためです。従来の ASP で実行する必要があります。

「send」行を「objRequest.send objXMLDoc.XML」に変更しようとしましたが、これによりHTTP 400 Bad Requestエラーが発生します。


strXmlToSend = "<some valid xml>"
webserviceurl = "http://webservice.com"
webserviceSOAPActionNameSpace = "avalidnamespace"

Set objRequest = Server.createobject("MSXML2.XMLHTTP.3.0")
objRequest.open "POST", webserviceurl, False

objRequest.setRequestHeader "Content-Type", "application/soap+xml"
objRequest.setRequestHeader "CharSet", "utf-8"
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate"
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate"

Set objXMLDoc = Server.createobject("MSXML2.DOMDocument.3.0")
objXMLDoc.loadXml strXmlToSend
objRequest.send objXMLDoc
set objXMLDoc = nothing
4

2 に答える 2

3

これが私が過去にうまく使ったものです:

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    xmlhttp.open "POST", url, false
    xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    xmlhttp.setRequestHeader "SOAPAction", "http://www.mydomain.com/myaction" 
    xmlhttp.send postdata
    xml = xmlhttp.responseText
于 2010-01-07T12:33:40.297 に答える
3

send メソッドに XML DOM を渡すと、Content-Type は常に「text/xml」に設定されます。

コンテンツ タイプを制御する場合は、文字列を渡す必要があります。xml プロパティを呼び出すためだけに XML 文字列を DOM にロードしないでください。これは、xml 宣言の内容を変更する可能性があるためです。ところで、xml宣言はXML文字列でどのように見えますか?xmlが正しいと確信していますか? 存在する場合、XML宣言のエンコーディングは「UTF-8」と言う必要があります。

意味のないヘッダーを送信しないCharSetでください。CharSet は Content-Type ヘッダーの属性です。

安全ではない ASP 内から XMLHTTP を使用しないでください。

したがって、コードは次のようになります。

strXmlToSend = "<some valid xml>" 
webserviceurl = "http://webservice.com" 
webserviceSOAPActionNameSpace = "avalidnamespace" 

Set objRequest = Server.Createobject("MSXML2.ServerXMLHTTP.3.0") 
objRequest.open "POST", webserviceurl, False 

objRequest.setRequestHeader "Content-Type", "application/soap+xml; charset=UTF-8" 
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate" 
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate" 

objRequest.send strXmlToSend 

その「アクション」ヘッダーが不必要に見えるかどうかはわかりません。おそらくこれは何らかの形でまだ失敗するでしょうが、もはや Content-Type ヘッダーについて不平を言うべきではありません。

于 2010-01-07T18:07:02.110 に答える