ASP.NET AJAX客户端编程之旅(二)——知其所以然(转载)
2009-09-16 15:33
267 查看
ASP.NET AJAX客户端编程之旅(二)——知其所以然
摘要在上一篇文章中,做了一个“Hello!ASP.NET AJAX”的小例子,但是并没有对其中的技术做解释。这一篇中,将探讨一下使用ASP.NET AJAX框架在客户端调用后台代码的基本方法,并且讨论异常处理的方法。
如何在客户端直接调用WebService中的方法?
1.Web.config中需要配置好运行ASP.NET AJAX框架相应的配置项,当然,建立一个ASP.NET AJAX Enabled Web Site项目时,Web.config已经配置好了。
2.想让某个WebService可以被JS调用,需要做一下几步:
I.在这个WebService文件里用“using System.Web.Script.Services;”引入这个命名空间。
II.在这个类的上面添加“[ScriptService]”属性。
III.在需要被调用的方法上添加“[WebMethod]”属性。
具体例子可以参考《ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX》中的SayHelloService.cs的代码。
3.调用WebService的客户端页面也要做相应准备。首先就是页面中要有一个ScriptManager控件,然后需要在其中指明WebService文件的位置。如:
<Services>
<asp:ServiceReference Path="~/SayHelloService.asmx" />
</Services>
将这段代码放在<asp:ScriptManager>和<asp:ScriptManager />标签之间,就可以使得这个页面中的JS可以直接调用SayHelloService.asmx中的方法。具体代码可以参考《ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX》中第二个例子中的Default.aspx的代码。
做好以上三项准备,这个页面中的JS代码就可以使用我们熟悉的“类名.方法名”的方法直接调用WebService中的方法了。
魔法背后的故事
我们知道,虽然我们一直说是“直接调用”,但这是指在语法层面上“直接调用”。而实际上,JavaScript代码是不可能真正直接调用后台程序的,这中 间一定使用了XMLHttpRequest对象。那么,到底是谁给我们实施了“障眼法”?答案就在下面这张图上:
[align=center]//单击btnSayHello时调用的JS函数
2function btnSayHello_onClick()
3
7//成功时的回调函数
8function OnSucceeded(reusltText)
9
//失败时的回掉函数
function OnFailded(error)
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class SayHelloService : System.Web.Services.WebService
{
public SayHelloService() { }
[WebMethod]
public string SayHello()
{
//Hello myHello = new Hello();
//return myHello.SayHello();
throw new Exception("我来搞破坏!");
}
}[/align]
这里我们手工抛出了一个异常。下面运行程序,会得到如下结果:
如上图,当出现异常时,不仅自动调用了异常处理回调函数,还很方便地取得了错误信息。
结束语
本篇介绍了从JavaScript中调用WebService的一般方法、基本原理及使用异常处理,并且回答了上一篇留下的几个问题。然而还有一个问题没 有讨论:到目前为止,我们调用的后台方法都是没有参数的,那么如果有参数,ASP.NET AJAX可以实现JavaScript变量类型和C#变量类型的自动转换吗?如果是复杂类型呢?如实体类、各种对象。再进一步,如果可以,应该怎么来做 呢?我们将在下一篇讨论这个问题。
主要参考文献
[1] 陈黎夫,ASP.NET AJAX程序设计-第II卷:客户端,人民邮电出版社,2007年10月
相关文章推荐
- ASP.NET AJAX客户端编程之旅(二)——知其所以然
- ASP.NET AJAX客户端编程之旅(二)——知其所以然
- ASP.NET AJAX客户端编程之旅(六)——来做一个自己的客户端控件(转载)
- ASP.NET AJAX客户端编程之旅(二)——知其所以然
- ASP.NET AJAX客户端编程教程(2)——知其所以然
- ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX(转载)
- ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化(转载)
- [导入]ASP.NET AJAX客户端编程之旅(二)——知其所以然
- ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX
- [最新版]Asp.net Ajax 编程备忘录----细数28个服务器端控件 [转载]
- ASP.NET AJAX客户端编程之旅(七)——剩下的问题(完结篇)
- ASP.NET AJAX客户端编程之旅(一)——Hello!ASP.NET AJAX
- [导入]ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化
- ASP.NET AJAX客户端编程之旅(二)
- ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化
- Asp.net Ajax客户端编程二之页面生命周期和请求生命周期
- ASP.NET AJAX客户端编程
- ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化
- Asp.net Ajax 客户端编程 – Ajax 原理
- ASP.NET AJAX客户端编程之旅(七)——剩下的问题(完结篇)