在园子里看到关于Ajax调用WebService文章不再少数,也写了几个调用的实例,过两天来看感觉理不清思路,今天加以小结:
WebService没有什么用户界面,只对外公开调用的方法,专注业务逻辑的实现,这恰好和ASP.NET AJAX客户端编程模型所倡导的“将表现层和业务逻辑层彻底分开”的理念不谋而合。
微软的Ajax框架用来处理客户端的用户界面,实现于用户的具体交互,而服务器端只关心数据的处理,而无需理会客户端表现样式的变化。Ajax本身的异步通信层所自动生成的Web Service客户端访问代理,WebService同样也可以借用。
做出一个实例如下:业务需求—在界面的文本框中输入用户名,调用服务器端的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;
- }
- }
客户端调用代码:
- --调用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)
(4)为客户端异步调用指定回调函数,在回调函数中接收返回值并进一步处理
本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765474