ASP.NET AJAX1.0尝鲜试用:Web Service调用

系统环境:Windows Server 2003 + IIS6
开发环境:Visual Web Developer 2005速成版 + ASP.NET AJAX 1.0
使用目的:无刷新调用服务器端的Web Service
实现关键:ScriptManager + ScriptService

安装ASP.NET AJAX1.0后,在VS中建立网站时多了一个选项:ASP.NET AJAX-Enabled Web Site,选择这一个可以创建一个已经配置好使用AJAX的网站(主要是web.config)里的配置,做个最简单的:

1. 新建一个ASP.NET AJAX-Enabled Web Site(HTTP/FTP/文件系统都可以),这时默认的Default.aspx已经包括了对ScriptManager的引用

2. 在项目中添加一个Web Service文件,取名为TestService.asmx,代码如下:

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://www.cnblogs.com/dingxue")]
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
[ScriptService]     
//注意
public class TestService : System.Web.Services.WebService {

    
public TestService () {
    }

    [WebMethod]
    
public string Merge(string a, string b)
    {
        
return a + b;
    }
}

上面带注释的两行是为了使此WEB服务可以被AJAX调用而加的,是必须的。这个WEB服务非常简单,有一个Merge方法,接受两个string类型的参数,并连接这两个字符串后返回。

3. 修改Default.aspx文件中对ScriptManager的定义,以添加对刚才WEB Service的引用,代码如下:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    
<Services>
        
<asp:ServiceReference Path="TestService.asmx" />
    
</Services>
</asp:ScriptManager>

asp:ServiceReference实现了对一个Web Service的引用,Path属性指示了Web Service文件的位置

4. 添加测试用的HTML控件,三个文本框,两个用于输入,一个用于显示结果,还有一个按钮是用来执行的,如下:

<input id="txt1" size="5" type="text" /> +
<input id="txt2" size="5" type="text" /> =
<input id="txt3" size="10" type="text" />
<input type="button" value="Merge" onclick="MergeIt()" />
5. 最后实现MergetIt(),用来实现最终调用:
<script type="text/javascript">
    
function MergeIt(){
        
new TestService().Merge($get("txt1").value,$get("txt2").value,MergeComplete);
    }
    
function MergeComplete(result){
        $get(
"txt3").value = result;
    }
</script>

上面的按钮调用了这里的MergeIt(),这个函数实现了对TestService的调用,利用 new TestService() 来调用Web Service中的Merge方法,参数这里有点要说明的,Web Service中的Merge方法只要两个参数,而这里却是三个,其中前两个和Web Service的参数是一致的,最后一个是另一个JS函数的名称:MergeComplete,这个是用来接受所调用方法的结果的,执行时会自动将WEB Service返回的结果传入MergeComplete,MergeComplete只接受一个参数,这里命名为result。
PS: $get是 document.getElementById的缩写,在ASP.NET AJAX中可以这样写,写起来看起来都比较好一些

6. 现在好了,按下F5吧,如果不出意外的话,应该 可以看到结果了,在前两个文本框输入字符,点下按钮看结果吧

项目来了人就太忙,好久不来,对不住大家了,附上本例源码下载:http://files.cnblogs.com/dingxue/AJAXEnabledWebSite1.rar(2007.8.5)

版权声明:本文原创发表于博客园,作者为丁学
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2007-03-17 17:36 丁学 阅读(3690) 评论(8)  编辑 收藏 所属分类: ASP.NET

  回复  引用    
#1楼 2007-03-22 09:02 | 姓名 [未注册用户]
好东西,好不容易看明白一个AJAX
  回复  引用    
#2楼 2007-04-14 15:25 | L [未注册用户]
请问只要安装asp.net ajax1.0就可以吗?
为什么我在对
对ScriptManager的定义,以添加对刚才WEB Service的引用
添加<services>后它会显示不支持<services>元素
我是安装VS。NET2005和asp.net ajax1.0
初学
  回复  引用    
#3楼 2007-04-14 15:44 | L [未注册用户]

我执行按钮后出现脚本错误
  回复  引用    
#4楼 2007-04-15 10:58 | L [未注册用户]
终于调试好了
学习
  回复  引用    
#5楼 2007-05-17 16:45 | wuyu [未注册用户]
我也是,有脚本错误,说是“TestServices”未定义
  回复  引用    
#6楼 2007-08-05 10:52 | soonssa [未注册用户]
我的也是,有脚本错误,说是“TestServices”未定义
麻烦能不能提供源文件下载啊,soonssa@126.com,谢谢
  回复  引用  查看    
#7楼 [楼主]2007-08-05 14:36 | 丁学      
源文件放在了文章的最后,需要的朋友可以下载看一看
  回复  引用    
#8楼 2007-08-05 20:49 | soonssa [未注册用户]
太感谢了,上午留的言,下午就收到邮件,

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-18 09:44 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: