在園子裏看到關於Ajax調用WebService文章再也不少數,也寫了幾個調用的實例,過兩天來看感受理不清思路,今天加以小結:javascript
WebService沒有什麼用戶界面,只對外公開調用的方法,專一業務邏輯的實現,這剛好和ASP.NET AJAX客戶端編程模型所倡導的「將表現層和業務邏輯層完全分開」的理念不謀而合。java
微軟的Ajax框架用來處理客戶端的用戶界面,實現於用戶的具體交互,而服務器端只關心數據的處理,而無需理會客戶端表現樣式的變化。Ajax自己的異步通訊層所自動生成的Web Service客戶端訪問代理,WebService一樣也能夠借用。sql
作出一個實例以下:業務需求—在界面的文本框中輸入用戶名,調用服務器端的WebService中方法返回服務器端的時間並問候該用戶.顯示在界面上:編程
輸入chenkaige後顯示客戶端的結果:服務器
調用的WebService代碼以下:框架
其中在WebService中編寫代碼前必需要導入System.Web.Script.Services空間支持,同時類前加上[ScriptService]的特性(爲了生成客戶端調用代理)異步
- using System;
- using System.Web;
- using System.Collections;
- using System.Web.Services;
- using System.Web.Services.Protocols;
- using System.Web.Script;
- using System.Web.Script.Services;
- /**//// <summary>
- /// 新建一個WebService用來實現經過Ajax的特殊異步通訊層來調用該自定義方法
- /// Author:chenkai Timer:2009年1月27日23:01:35 Document: A simple Demo
- /// </summary>
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [ScriptService]//爲了Asp.NET Ajax生成WebService客戶端調用代理 進而容許咱們再javascript中調用WebService中自定義方法
- public class WebService : System.Web.Services.WebService {
- public WebService () {
- //若是使用設計的組件,請取消註釋如下行
- //InitializeComponent();
- }
- /**//// <summary>
- /// 自定義一個Webservice方法實現 返回一個從新拼接的字符串
- /// </summary>
- /// <param name="clintname">客戶端字符竄</param>
- /// <returns>服務端修改後的字符串</returns>
- [WebMethod]
- public string ClintSayHello(string clintname)
- {
- return DateTime.Now.ToString() + "Good Night!" + clintname;
- }
- }
客戶端調用代碼:ide
- --調用WebService的JavaScript
- <script type="text/javascript">
- //自定義經過javaScript調用服務器端的WebService中的自定義方法
- function ScriptFunction()
- {
- //得到文本框中輸入的ClintName
- var getname=document.getElementById("clintname").value;
- alert(getname);
- //開始調用Webservice同時還調用一個客戶端自定義的回調函數
- //調用語法是[NameSpace].[ClassName].[MethodName](param1, param2 …, callbackFunction)
- WebService.ClintSayHello(getname,CallBackFun);
- }
- //自定義一個回調函數
- //該回調函數將在服務器端異步調用成功返回後由ASP.NET AJAX異步通信層自動調用
- //回調函數的result參數表明了本次異步調用的返回結果—即調用WebService自定義方法返回結果
- //其result參數也會由ASP.NET AJAX異步通信層傳遞進來,無需任何手工控制
- function CallBackFun(result)
- {
- document.getElementById("DispayResult").innerHTML="<B>"+result+"</B>";
- alert("Sucess To Transfer Server WebService!");
- }
- </script>
- --頁面代碼:
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- <Services>
- <asp:ServiceReference Path="WebService.asmx" />
- </Services>
- </asp:ScriptManager>
- <b>///經過Asp.net Ajax框架再客戶端調用WebService中方法
- <br />
- ///Author:chenkai Timer:2009年1月27日23:52:45</b>
- <div>
- InputClintName:<input type="text" id="clintname" />
- <input type="button" id="ClintBtnClick" onclick="return ScriptFunction()" value="SendToClint"/>
- </div>
- --div層用來顯示結果
- <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)爲客戶端異步調用指定回調函數,在回調函數中接收返回值並進一步處理