zoukankan      html  css  js  c++  java
  • 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框架的强大。


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

  • 相关阅读:
    Linux使用退格键时出现^H解决方法
    Linux centos7下php安装cphalcon扩展的方法
    Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    在Vmware中安装CentOS7
    php stomp.dll 下载地址
    WIN7 64位系统安装JDK并配置环境变量
    SVN如何将版本库url访问地址中的https改为http
    两个日期这间的间隔天数
    vi/vim 命令速查手册
    判断PC或mobile设备
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4669434.html
Copyright © 2011-2022 走看看