ajax——client访问webservice基本用法

    学前aps.net当我学会了使用服务器端的访问webservice方法,然后实现一个样本:web server模拟网上购物,今天学习asp.net ajax的时候学习到了client直接訪问webserivice的方式。

这样的client直接訪问webserver的方式体现了ajax的异步刷新数据的思想。

client訪问webservice基础

webservice端的创建步骤:

1.创建一个aps.net webservice

2.增加标记[scriptService]

3.写webservice的方法,并增加标记[webMethod]进行释放server方法

client訪问webservice的步骤

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

2.传入參数

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

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

    以下是自己写的一个小样例:大概需求是在client输入两个数,去调用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;
        }
    }

client

<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}
Message: {1}
ExceptionType: {2}
StackTrace: {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="等于" onclick="getDivsion()"/>
</body>

执行结果

输入两个整数的时候:


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


client訪问pageMethod基础

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

1.这样的方式仅仅能在将调用的方法,放到server端(aspx的后台代码)。

2.仅仅能公开静态方法,不能获取页面的详细控件内容

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

client訪问server端的步骤:

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

2.通过pageMethods.MethodName訪问。

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

以下是一个简单的小样例:大概需求是:在server端写入获取当前时间的方法,client调用这种方法。

server端

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

client

/head>
<body>
    <form id="form1" runat="server">
    <%--EnablePageMethods方法赋值不可少--%>
		<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
		
		<input type="button" value="Get Current Time" onclick="getCurrentTime()" />
    
		<script language="javascript" type="text/javascript">
			function getCurrentTime() {
			    //getCurrentTimeSucceeded为回调函数
				PageMethods.GetCurrentTime(getCurrentTimeSucceeded);
			}
			
			function getCurrentTimeSucceeded(result)
			{
				alert(result);
			}
		</script>
    </form>
</body>

client代理使用细节

函数调用的完整签名

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

arg1:參数

onSuccessed:成功调用的函数

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

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

回调函数完整签名

onSuccessed/onFailed(result,UserContext,methodName)

WebService级别默认属性

Timeout:超时
Defaultusercontext:默认的usercontext

Defaultsuccessededcallback:默认成功回调函数

Defaultfailedcallback:默认的错误处理方法

总结:

    这一部分刚刚開始学习,学起来有点慢。可是对这一块自己还是有非常大的兴趣的。由于异步传输确实是提高了效率非常强大。当然通过这部分的client訪问webserivice的学习,也越来越感觉到了asp.net ajax框架的强大。


版权声明:本文博客原创文章。博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/zfyouxi/p/4669434.html