首页 > 代码库 > ajax——客户端访问webservice基本使用方式

ajax——客户端访问webservice基本使用方式

    之前学习aps.net的时候学习过使用服务器端去访问webservice的方法,当时实现了一个例子:web server模拟网上购物,今天学习asp.net ajax的时候学习到了客户端直接访问webserivice的方式。这种客户端直接访问webserver的方式体现了ajax的异步刷新数据的思想。

客户端访问webservice基础

webservice端的创建步骤:

1.创建一个aps.net webservice

2.加入标记[scriptService]

3.写webservice的方法,并加入标记[webMethod]进行释放服务器方法

客户端访问webservice的步骤

1.在插入的的scrptmanager引入asmx文件。

2.传入参数

3.写一个方法作为成功的回调函数。

4.也可以写一个错误处理作为失败的回调函数。

    下面是自己写的一个小例子:大概需求是在客户端输入两个数,去调用webservic端的除法的方法,如果成功输出运行结果,如果错误输入输出错误的具体内容。(特别简单)

webservic端

   public class divsion : System.Web.Services.WebService
    {

        [WebMethod]
        public int getDivison(int a, int b)//除法运算
        {
            return a / b;
        }
        [WebMethod]
        public int timeOut()
        {
            Thread.Sleep(5000);  //设置睡眠时间
            return 0;
        }
    }

客户端

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="divsion.asmx" />
            </Services>
        </asp:ScriptManager>
        <script language="javascript" type="text/javascript">
            //提供默认的错误处理回调函数,这个函数是在后面的所有的方法加载之后,才开始调用这个函数,所以,failedCallback的生命起始于最后的
            //WebApplication1.divsion.set_defaultFailedCallback(failedCallback);
            //设置为1秒后超时
            WebApplication1.divsion.set_timeout(1000);
            function getDivsion()
            {
                var a = document.getElementById("Text1").value;
                var b = document.getElementById("Text2").value;
                WebApplication1.divsion.getDivison(a,b,getSuccess,getFailed);
            } 
            function getSuccess(result)   //成功后回调函数
            {
                alert(result);
            }
            function getFailed(error)  //错误处理
            {
                var message = String.format(
                  	"Timeout: {0}\nMessage: {1}\nExceptionType: {2}\nStackTrace: {3}",
					error.get_timedOut(),
					error.get_message(),
					error.get_exceptionType(),
					error.get_stackTrace());
                alert(message);
            }
        </script>
    
    </div>
    </form>
    <input id="Text1" type="text" />
    除以
    <input id="Text2" type="text" />
    <input id="Button1" type="button" value=http://www.mamicode.com/"等于" onclick="getDivsion()"/>>

运行结果

输入两个整数的时候:


除数为0的时候:会抛出错误处理


客户端访问pageMethod基础

这种方式与前一种的不同在于:

1.这种方式只能在将调用的方法,放到服务器端(aspx的后台代码)。

2.只能公开静态方法,不能获取页面的具体控件内容

3.使用webmethod标记,进行释放。

客户端访问服务器端的步骤:

1.为页面引入scrptmanager,并修改srciptMangeer中设置enablepagemethods=true

2.通过pageMethods.MethodName访问。

3.写一个方法作为成功或失败的回调函数。

下面是一个简单的小例子:大概需求是:在服务器端写入获取当前时间的方法,客户端调用这个方法。

服务器端

	[WebMethod]
	public static DateTime GetCurrentTime()
	{      
        //根据客户端所在的时间来显示
        return DateTime.UtcNow;
	}

客户端

/head>
<body>
    <form id="form1" runat="server">
    <%--EnablePageMethods方法赋值不可少--%>
		<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
		
		<input type="button" value=http://www.mamicode.com/"Get Current Time" onclick="getCurrentTime()" />>

客户端代理使用细节

函数调用的完整签名

Invoke(arg1,..argn,onSuccessed,onFailed,userContext)

arg1:参数

onSuccessed:成功调用的函数

onFailed:失败调用的函数,或者是错误处理的函数。

userContext:调用方法,接受方法继续处理方法,是不同的方法,所以传参就可以把传递的参数放到usercontext

回调函数完整签名

onSuccessed/onFailed(result,UserContext,methodName)

WebService级别默认属性

Timeout:超时
Defaultusercontext:默认的usercontext

Defaultsuccessededcallback:默认成功回调函数

Defaultfailedcallback:默认的错误处理方法

总结:

    这一部分刚刚开始学习,学起来有点慢,但是对这一块自己还是有很大的兴趣的,因为异步传输确实是提高了效率很强大。当然通过这部分的客户端访问webserivice的学习,也越来越感觉到了asp.net ajax框架的强大。