学前aps.net当我学会了使用服务器端的访问webservice方法,然后实现一个样本:web server模拟网上购物,今天学习asp.net ajax的时候学习到了client直接訪问webserivice的方式。
这样的client直接訪问webserver的方式体现了ajax的异步刷新数据的思想。
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}\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="等于" onclick="getDivsion()"/> </body>
执行结果
输入两个整数的时候:
除数为0的时候:会抛出错误处理
这样的方式与前一种的不同在于:
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>
函数调用的完整签名
Invoke(arg1,..argn,onSuccessed,onFailed,userContext)
arg1:參数
onSuccessed:成功调用的函数
onFailed:失败调用的函数。或者是错误处理的函数。
userContext:调用方法,接受方法继续处理方法,是不同的方法,所以传參就能够把传递的參数放到usercontext中
回调函数完整签名
onSuccessed/onFailed(result,UserContext,methodName)
WebService级别默认属性
Timeout:超时
Defaultusercontext:默认的usercontextDefaultsuccessededcallback:默认成功回调函数
Defaultfailedcallback:默认的错误处理方法
这一部分刚刚開始学习,学起来有点慢。可是对这一块自己还是有非常大的兴趣的。由于异步传输确实是提高了效率非常强大。当然通过这部分的client訪问webserivice的学习,也越来越感觉到了asp.net ajax框架的强大。
版权声明:本文博客原创文章。博客,未经同意,不得转载。