在微軟Ajax框架中異步調用WebService(JavaiScript中調用)

在園子裏看到關於Ajax調用WebService文章再也不少數,也寫了幾個調用的實例,過兩天來看感受理不清思路,今天加以小結:javascript

WebService沒有什麼用戶界面,只對外公開調用的方法,專一業務邏輯的實現,這剛好和ASP.NET AJAX客戶端編程模型所倡導的「將表現層和業務邏輯層完全分開」的理念不謀而合。java

微軟的Ajax框架用來處理客戶端的用戶界面,實現於用戶的具體交互,而服務器端只關心數據的處理,而無需理會客戶端表現樣式的變化。Ajax自己的異步通訊層所自動生成的Web Service客戶端訪問代理,WebService一樣也能夠借用。sql

作出一個實例以下:業務需求—在界面的文本框中輸入用戶名,調用服務器端的WebService中方法返回服務器端的時間並問候該用戶.顯示在界面上:編程

 

輸入chenkaige後顯示客戶端的結果:服務器

 

調用的WebService代碼以下:框架

其中在WebService中編寫代碼前必需要導入System.Web.Script.Services空間支持,同時類前加上[ScriptService]的特性(爲了生成客戶端調用代理)異步

  
  
           
  
  
  1. using System;  
  2. using System.Web;  
  3. using System.Collections;  
  4. using System.Web.Services;  
  5. using System.Web.Services.Protocols;  
  6. using System.Web.Script;  
  7. using System.Web.Script.Services;  
  8.  
  9.  
  10. /**//// <summary>  
  11. /// 新建一個WebService用來實現經過Ajax的特殊異步通訊層來調用該自定義方法  
  12. /// Author:chenkai    Timer:2009年1月27日23:01:35  Document: A simple Demo  
  13. /// </summary>  
  14. [WebService(Namespace = "http://tempuri.org/")]  
  15. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  16. [ScriptService]//爲了Asp.NET Ajax生成WebService客戶端調用代理  進而容許咱們再javascript中調用WebService中自定義方法  
  17. public class WebService : System.Web.Services.WebService {  
  18.  
  19.     public WebService () {  
  20.  
  21.         //若是使用設計的組件,請取消註釋如下行   
  22.         //InitializeComponent();   
  23.     }  
  24.      /**//// <summary>  
  25.      /// 自定義一個Webservice方法實現 返回一個從新拼接的字符串  
  26.      /// </summary>  
  27.      /// <param name="clintname">客戶端字符竄</param>  
  28.      /// <returns>服務端修改後的字符串</returns>  
  29.     [WebMethod]  
  30.     public string ClintSayHello(string clintname)  
  31.     {  
  32.         return DateTime.Now.ToString() + "Good Night!" + clintname;  
  33.     }  
  34.       

客戶端調用代碼:ide

  
  
           
  
  
  1. --調用WebService的JavaScript  
  2.     <script type="text/javascript"> 
  3.       //自定義經過javaScript調用服務器端的WebService中的自定義方法  
  4.       function ScriptFunction()  
  5.      {  
  6.          //得到文本框中輸入的ClintName  
  7.          var getname=document.getElementById("clintname").value;  
  8.          alert(getname);  
  9.          //開始調用Webservice同時還調用一個客戶端自定義的回調函數  
  10.          //調用語法是[NameSpace].[ClassName].[MethodName](param1, param2 …, callbackFunction)  
  11.          WebService.ClintSayHello(getname,CallBackFun);  
  12.            
  13.      }   
  14.       
  15.      //自定義一個回調函數  
  16.      //該回調函數將在服務器端異步調用成功返回後由ASP.NET AJAX異步通信層自動調用  
  17.      //回調函數的result參數表明了本次異步調用的返回結果—即調用WebService自定義方法返回結果    
  18.      //其result參數也會由ASP.NET AJAX異步通信層傳遞進來,無需任何手工控制   
  19.      function CallBackFun(result)  
  20.      {  
  21.         document.getElementById("DispayResult").innerHTML="<B>"+result+"</B>";  
  22.         alert("Sucess To Transfer Server WebService!");  
  23.      }     
  24.     </script> 
  25.      
  26.    --頁面代碼:  
  27.       <asp:ScriptManager ID="ScriptManager1" runat="server"> 
  28.          <Services> 
  29.            <asp:ServiceReference Path="WebService.asmx" /> 
  30.          </Services> 
  31.       </asp:ScriptManager> 
  32.         <b>///經過Asp.net Ajax框架再客戶端調用WebService中方法  
  33.          <br /> 
  34.          ///Author:chenkai  Timer:2009年1月27日23:52:45</b> 
  35.         <div> 
  36.           InputClintName:<input type="text" id="clintname" /> 
  37.           <input type="button" id="ClintBtnClick" onclick="return ScriptFunction()" value="SendToClint"/> 
  38.         </div> 
  39.         --div層用來顯示結果  
  40.         <div id="DispayResult"></div> 

微軟Ajax框架中調用WebService的具體步驟以下:函數

(1)WebService類中導入System.Web.Script.Services命名空間,並在類前添加[ScriptService]屬性或者將Web Service類或須要暴露給客戶端的Web Service方法添加[ScriptService]屬性-根據須要來設定
(2)在頁面中的ScriptManager控件中添加對該Web Service的引用
    
(3)在客戶端使用以下JavaScript語法調用該Web Service:[NameSpace].[ClassName].[MethodName](param1, param2 ......, callbackFunction) 
spa

(4)爲客戶端異步調用指定回調函數,在回調函數中接收返回值並進一步處理

相關文章
相關標籤/搜索