7.6.2 通过Microsoft.XMLDOM调用Web Service

7.6.2  通过Microsoft.XMLDOM调用Web Service

(1)在页面中添加如下代码:

  1. <body>  
  2.     <input type="button" value="调用" onclick="getdata()"><br>  
  3.     <span id="div1" class="list"></span>  
  4. </body> 

(2)调用WebService返回字符串:

  1. <head>  
  2.     <title>通过Microsoft.XMLDOM调用WebService</title>      
  3.     <script language="javascript">  
  4.        function getdata()  
  5.        {           
  6.         docSubmit =new ActiveXObject("Microsoft.XMLDOM");  
  7.         docSubmit.async = false;     
  8.         docSubmit.load("http://localhost:12074/Service1.asmx/  
  9.            GetProductPrice?ProductId=001");   
  10.         var s=docSubmit.documentElement.text; //获取返回结果               
  11.         div1.innerHTML=s;         
  12.        }    
  13.        //setInterval(getdata,2000);//定时间隔2秒执行        
  14.     </script>  
  15. </head> 

在docSubmit.load()方法中,填写自己实际的Web Service地址。

(3)再看一个返回数据集的Web Service方法,例如:

  1. [WebMethod(Description = "获得产品数据列表")]  
  2. public string GetProducts(int topNum)  
  3. {  
  4.     Products pro = new Products();              
  5.     DataSet ds = pro.GetProducts(topNum);  
  6.     return ds.GetXml();  

通过Get方式http://localhost:12074/Service1.asmx/GetProducts?topNum=5 调用实际返回的XML数据:

  1. <?xml version="1.0" encoding="utf-8" ?>   
  2. <string xmlns="http://tempuri.org/">  
  3. <NewDataSet>   
  4. <ds><ProductId>001</ProductId> <Name>test</Name> </ds>   
  5. <ds><ProductId>dd</ProductId> <Name>图书</Name> </ds>   
  6. <ds><ProductId>dn</ProductId> <Name>电脑5</Name> </ds>   
  7. <ds><ProductId>ds</ProductId> <Name>图书</Name> </ds>   
  8. <ds><ProductId>jj</ProductId> <Name>家具</Name> </ds>   
  9. </NewDataSet>  
  10. </string

(4)获取DataSet数据集的调用脚本:

  1. <head>  
  2.     <title>通过Microsoft.XMLDOM调用WebService</title>  
  3.     <script language="javascript">  
  4.       function getdata()  
  5.       {  
  6.         var index=0;     
  7.         docSubmit =new ActiveXObject("Microsoft.XMLDOM");  
  8.         docSubmit.async = false;     
  9.         docSubmit.load("http://localhost:12074/Service1.asmx/  
  10.         GetProducts?topNum=5");   
  11.         docSubmit.loadXML(docSubmit.xml.replace(/&lt;/g,"<").replace(/&gt;/g,">"));  
  12.              
  13.         var s="";    
  14.         nodeList=docSubmit.documentElement.getElementsByTagName("ds");  
  15.         for (i=0;i<nodeList.length;i++)  
  16.         {  
  17.            s=s+nodeList(i).selectSingleNode("Name").text+'<br>';//显示产品名称  
  18.         }      
  19.         div1.innerHTML=s;      
  20.       }      
  21.     </script>  
  22. </head> 

注  意 Fromework 1.0和Fromework 1.1是有区别的,在Fromework 1.1中的 machine.config(C:\WINNT\Microsoft.NET\Framework\v1.1.4322\CONFIG),默认Web Service去除了Post、Get方法。你可在你的 machine.config中或者只在webServices项目的Web.config 的<system.web>里加上:

  1. <webServices>  
  2.     <protocols>  
  3.         <add name="HttpPost" />  
  4.         <add name="HttpGet" />  
  5.     </protocols>  
  6. </webServices> 

否则,在IE地址栏中输入webservices地址访问时,将会出现提示请求格式无法识别,如图7-10所示。

 
(点击查看大图)图7-10  Web服务错误

还有ActiveX对象不同:

  1. //Fromework 1.0版本中  
  2. docSubmit = new ActiveXObject("MSXML2.DOMDocument");  
  3. //Fromework 1.1版本中  
  4. docSubmit = new ActiveXObject("Microsoft.XMLDOM"); 
posted @ 2012-02-06 14:08  ^_^肥仔John  阅读(363)  评论(0编辑  收藏  举报