勤奋的码农
欢迎光临我的淘宝店:小丑情趣内衣店

之前写程序的时候,在调用服务(web services和WCF)的时候,都是在项目中用web引用(web services )和服务引用(WCF)的方法,然后在后台直接实例化,这样就可以使用服务中的方法了。

今天看到一篇关于asp.net ajax调用服务的文章,就没事研究了一下。这里AJAX主要指的是ScriptManager控件。

在ScriptManager控件中提供了Services子元素,这个子元素有提供了ServiceReference摸板以实现对服务的引用。

1.ScriptManager引用web services:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ScriptManager控件调用WCF._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
         <Scripts>
            <asp:ScriptReference Path="~/main.js" />
         </Scripts>
         <Services>
             <asp:ServiceReference Path="MyWebService.asmx"/>
         </Services>
       </asp:ScriptManager>
       <input id="Text1" type="text" value="rock"/>
       <input id="Button1" type="button" value="button" onclick="myalert();" />
    
    </div>
    </form>
</body>
</html>

 

其中Scripts子元素提供了ScriptReference摸板,是对脚本文件的调用。

2.ScriptManager引用WCF服务,引用方法和Web services是一样的。这里需要注意的是,这里引用的不是普通的WCF服务,而是“启用了AJAX的WCF服务”,否则后面是找不到普通的WCF服务的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ScriptManager控件调用WCF._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
         <Scripts>
            <asp:ScriptReference Path="~/main.js" />
         </Scripts>
         <Services>
            <asp:ServiceReference Path="~/Service1.svc"/>
         </Services>
       </asp:ScriptManager>
       <input id="Text1" type="text" value="rock"/>
       <input id="Button1" type="button" value="button" onclick="myalert();" />
    
    </div>
    </form>
</body>
</html>

3.web services mian.js文件是用来实现事件的

//Web services
function myalert() {
   //引用web services时,要添加它的命名空间,否则回报“MyWebService未定义”
   ajax控件使用.MyWebService.HelloSomeBody(
                  document.getElementById("Text1").value,  //参数
                  WebServiceSucceededMethod,   //WebService调用成功时回调的函数,可添加也可不添加
                  WebServiceFailedMethod  //WebService调用失败时回调的函数,可添加也可不添加
         );
   return false;

}


//WebService调用成功时回调的函数
function WebServiceSucceededMethod(result) {
   alert("执行成功的方法\r\n" + result);

}
//WebService调用失败时回调的函数
function WebServiceFailedMethod(result) {
   alert("执行失败的方法\r\n" + result);
}



function complete(result) {
   alert(result);
}
    

这里的调用web services时必须加上命名空间( ajax控件使用)即 ajax控件使用.MyWebService,否则会报“MyWebService”未定义。

4.WCF 的main.js

function myalert() {
   //这里的添加的是“启用了AJAX的WCF服务”,不是普通的WCF服务
   var wcfProxy = new Service1();
   wcfProxy.HelloSomeBoby(
                   document.getElementById("Text1").value,  //参数
                   WebServiceSucceededMethod,   //WebService调用成功时回调的函数,可添加也可不添加
                   WebServiceFailedMethod  //WebService调用失败时回调的函数,可添加也可不添加
                 //  complete  //完成事件
         );
   return false;

}
//WebService调用成功时回调的函数
function WebServiceSucceededMethod(result) {
   alert("执行成功的方法\r\n" + result);
  
}
//WebService调用失败时回调的函数
function WebServiceFailedMethod(result) {
   alert("执行失败的方法\r\n" + result);
}


function complete(result) {
   alert(result);
}
    

这里可以直接调用Service1,不需要加命名空间

5.最后实现的效果如下:

 

 

 

 

 

这就是asp.net ajax调用服务

这里省略了实现服务的过程,大家可以先学习服务,然后在进一步学习这里。

还有一个需要说明的地方,就是目前我这里只实现了同一个项目中调用服务,我看了网上说,目前还不能实现引用外部的服务,

对于引用外部的,不知大家是否有方法实现。

如果需要源代码的,可以留言给我。

posted on 2012-07-26 16:28  勤奋的码农  阅读(395)  评论(0编辑  收藏  举报

友荐云推荐