想要访问webService,最好先明白webService的一些相关概念,如soap、wsdl,因为你访问的时候真的无法绕开这些东西。
之前分享的一篇文章里有相关概念的介绍,不了解的朋友可以看看 WebService的相关概念
因为webService访问的是wsdl页面,使用的是SOAP协议,所以我们访问时采用XMLHTTP发送我们的请求。我的代码如下
<script language="JavaScript" type="text/javascript"> var variable=['arg0','arg1','arg2']; var value=['libsys','2017-02-24 9:40',2]; var method='getReader'; var url='http://58.*.*.*:8081/HWWebService/LibServicePort?wsdl'; var targetNamespace='http://service.ws.*.com/'; var datacopy= '<?xml version="1.0" encoding="utf-8"?>'; datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.*.com/">'; datacopy += '<soapenv:Header/>'; datacopy += '<soapenv:Body>'; datacopy += '<ser:getReader>';
datacopy += '</ser:getReader>';for(var i=0;i<variable.length;i++) { datacopy += '<'+variable[i]+'>'+value[i]+'</'+variable[i]+'>'; }
datacopy += '</soapenv:Body>';
datacopy += '</soapenv:Envelope>'; function RequestByPost(){ this.xmlhttp=null; if (window.XMLHttpRequest) {// code for all new browsers xmlhttp=new XMLHttpRequest(); } else if (window.ActiveXObject) {// code for IE5 and IE6 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } var data; data = '<?xml version="1.0" encoding="utf-8"?>'; data += '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' data += ' xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' data += ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'; data += '<soap:Header/>'; data += '<soap:Body>'; data += '<'+method+' xmlns="'+targetNamespace+'">'; for(var i=0;i<variable.length;i++) { data += '<'+variable[i]+'>'+value[i]+'</'+variable[i]+'>'; } data += '</'+method+'>'; data += '</soap:Body>'; data += '</soap:Envelope>'; alert(datacopy); xmlhttp.open("POST",url, true); //若通过get方式传输只须将post改为get xmlhttp.onreadystatechange = function (){ if (xmlhttp.readyState == 4) { if (xmlhttp.status==200) {// 200 = "OK" document.getElementById("result").innerHTML = xmlhttp.responseText; } else { alert("Problem retrieving XML data:" + xmlhttp.statusText); } } } xmlhttp.setRequestHeader ("Content-Type","text/xml; charset=utf-8"); //xmlhttp.SetRequestHeader ("Content-Length",data.length); xmlhttp.setRequestHeader ("SOAPAction",targetNamespace+method); xmlhttp.send(datacopy); } //test RequestByPost(); </script>
代码调试过程中也遇到过诸多问题,可以下载软件SoapUI做一下测试,看看你的wsdl是否能够成功访问。
如果SoapUI没问题,而程序不行,可以用浏览器的开发者工具看一下你发送的http请求中包含哪些信息,和SoapUI中的信息进行对比或许就能发现问题了