我正在用JS创建一个SOAP客户端,这是我第一次使用webServices,我的代码中必须有几个错误。
poit是,我的代码,我无法访问WebService,但我不知道如何访问内部的方法。所以webservice给了我以下响应:
<h1>Version</h1>
<p>Hi there, this is an AXIS service!</p>
<i>Perhaps there will be a form for invoking the service here...</i>
而不是我正在调用的方法的正确XML。
这是我的SOAP客户端的代码:
<html>
<script type="text/javascript">
function run(){
var objXMLHttpRequest = new XMLHttpRequest();
objXMLHttpRequest.open("GET", "http://localhost:8080/CrunchifyWS/services/Version?wdsl/", true);
objXMLHttpRequest.onreadystatechange = function () {
//alert(objXMLHttpRequest.readyState+" "+ objXMLHttpRequest.status);
if (objXMLHttpRequest.readyState == 4 && objXMLHttpRequest.status == 200) {
result = objXMLHttpRequest.responseXML;
alert(objXMLHttpRequest.responseText);
alert(objXMLHttpRequest.responseXML);
}
}
objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
var packet = '<?xml version="1.0" encoding="utf-8" ?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><getVersion xmlns="http://service.web.com.crunchify/"></getVersion></soap:Body></soap:Envelope>';
objXMLHttpRequest.send(packet);
// Add mentioned below code only if your application calls webservice synchronously. Otherwise use "onreadystatechange" process response.
response = objXMLHttpRequest.responseXML;
alert(objXMLHttpRequest.responseText+ " "+ response);
}
</script>
<head>
</head>
<body>
<button onclick="run()">Dale!</button>
</body>
</html>
我认为这个问题应该存在,但正如我所说,这是我的第一次,而且我不知道自己在做什么。
解决
答案 0 :(得分:0)
第一个问题可能出在这一行:
objXMLHttpRequest.open("GET", "http://localhost:8080/CrunchifyWS/services/Version?wdsl/", true);
这个网址 http://localhost:8080/CrunchifyWS/services/Version?wsdl 为您提供可以拨打的服务列表。
所以你可能会有类似的东西:
objXMLHttpRequest.open("GET", "http://localhost:8080/CrunchifyWS/services/myServiceMethod", true);
这是我认为的第一个问题。 第二次,您必须发送参数,而不是整个肥皂信封。
var packet = '<?xml version="1.0" encoding="utf-8" ?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><getVersion xmlns="http://service.web.com.crunchify/"></getVersion></soap:Body></soap:Envelope>';
objXMLHttpRequest.send(packet);
喜欢:
var parameters = "param1=15¶m2=30"
objXMLHttpRequest.send(parameters);
方法发送应该是 objXMLHttpRequest.onreadystatechange = function(){}
这个函数是一个回调来检查响应。
不要犹豫,看看这个链接: http://www.w3schools.com/xml/xml_dtd.asp
希望这个帮助
答案 1 :(得分:0)
您可以查看答案演变的评论,但简而言之:
1)SOAP方法调用需要使用HTTP方法“POST”,因此GET操作是第一个问题。
2)在SOAP 1.1中,服务器需要SOAPAction头来知道您尝试调用哪种方法。当使用“document literal wrapped”方法时,这并不是绝对必要的,并且许多SOAP 1.1服务器实际上接受空SOAP操作,因为它们可以根据请求的根标记找到方法,从而提供与SOAP 1.2的一些向前兼容性。 / p>
但是,严格的SOAP 1.1服务器需要正确发送SOAPAction标头:
objXMLHttpRequest.setRequestHeader("SOAPAction", "mySoapAction");
您可以在Web服务的原始WSDL中为您尝试调用的方法找到相应的SOAPAction。