js调用webservice 并构造SOAP进行身份验证

来源:互联网 发布:Java 执行Python 编辑:程序博客网 时间:2024/06/05 00:22

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>无标题页</title>

    <script language="javascript" type="text/javascript">
// <!CDATA[
  
//define
var xmlhttp;
var value=new Array();
var variable=new Array();
  
//Show Response MSG.
function handleStateChange()
{
  var h=document.getElementById("Label1");
  if(xmlhttp.readyState==4)
  {
    if(xmlhttp.status==200)
    {
      alert(xmlhttp.responseText);
      h.innerHTML=xmlhttp.responseText;
      //h.innerHTML=xmlhttp.responseXML;
    }
    else if(xmlhttp.status==404)
    {
      h.innerHTML="<br>找不到请求的服务器资源!";
    }
  }
  else if(xmlhttp.readyState==0)
  {
    h.innerHTML="<br>未初始化!";
  }
  else if(xmlhttp.readyState==1)
  {
    h.innerHTML="<br>正在加载……!";
  }
  else if(xmlhttp.readyState==2)
  {
    h.innerHTML="<br>已经加载完成!";
  }
  else if(xmlhttp.readyState==3)
  {
    h.innerHTML="<br>正在和服务器交互";
  }
  else
  {
    h.innerHTML=xmlhttp.responseXML;
  }
  
}
  
//Get Request Data's length
function getlen(str)
{
    var bytesCount=0;
    for (var i = 0; i < str.length; i++)
    {
    var c = str.charAt(i);
    if (/^[u0000-u00ff]$/.test(c))  //匹配双字节
       {
    bytesCount += 1;
    }
    else
    {
    bytesCount += 2;
    }
    }
    return bytesCount;
} 
  
//Create XMLHttpRequest Object
 function createXMLHttpRequest()
{
  
  if(window.ActiveXObject)
  {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if(window.XMLHttpRequst)
  {
    xmlhttp=new XMLHttpRequest();
  }
} 
  
//send Request By HTTP POST

//实际上这段代码就是用JS构造一个字符串,而这个字符串就是通过浏览器查看WEBSERVICE时方法时出现的那段
function RequestByPost(method,variable,value,url,_Namespace)
{
    createXMLHttpRequest();
    var data;
    data = '<?xml version="1.0" encoding="utf-8"?>';
    data = data + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
   
    //加了这段可以实现soap头

    //UserName ,Pwd这是我的SOAP验证形式,需替换
    data = data + "<soap:Header>"
    data = data + '<UserSoapHeader xmlns="http://tempuri.org/">'
    data = data + "<UserName>admin</UserName>"
    data = data + "<Pwd>faaaa</Pwd>"
    data = data + "</UserSoapHeader>"
    data = data + "</soap:Header>"
   
   
    data = data + '<soap:Body>';
    data = data + '<'+method+' xmlns="'+_Namespace+'">';
    for(var i=0;i<variable.length;i++)
    {
      data = data + '<'+variable[i]+'>'+value[i]+'</'+variable[i]+'>';
    }
    data = data + '</'+method+'>';
    data = data + '</soap:Body>';
    data = data + '</soap:Envelope>';
      
    xmlhttp.onreadystatechange=handleStateChange;
    xmlhttp.Open("POST",url, true);
    xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8");
    //xmlhttp.SetRequestHeader ("Content-Length",getlen(data));
    xmlhttp.SetRequestHeader ("SOAPAction",_Namespace+method);
    xmlhttp.Send(data);
    alert(data);
}
  

    //WeatherReport Test:
    function Button2_onclick() {
        //方法名,参数名,参数值,服务URL,服务所使用命名空间
        RequestByPost("HelloWorld",[],[],"http://localhost:13267/SERVICES/WebService.asmx","http://tempuri.org/");
    }
  
  window.onload = function(){
      Button2_onclick();
  }
// ]]>
    </script>

</head>
<body>
    <label id='Label1'>ss</label>
</body>
</html>