本次课程内容包括
    • 客户端访问WebService基础
    • 客户端访问PageMethod基础
    • 错误处理
    • 复杂数据类型使用基础
    • 客户端代理使用细节

收听本次课程需具备的条件
    • 了解.NET Framework开发
    • 熟悉JavaScript开发(应知道怎么调用方法,回调函数的概念

一、服务器端释放WebService方法
    • 编写一个普通的ASP.NET WebService
    • 为WebService类添加自定义属性标记
        – ScriptServiceAttribute
    • 释放WebService方法
        – 访问级别为public(首先基本public权限的方法
        – 使用WebMethodAttribute进行标记
    • 为页面中的ScriptManager(Proxy)引入asmx文件

二、客户端访问WebService
    • [Namespaces.]ClassName.MethodName (命名空间 -> 类 -> 方法
    • 依次传入参数
    • 传入一个方法做为成功后的回调函数
    • 即使没有返回值也会调用回调函数(因为它只是通知你事件已经处理完毕)

DEMO 1客户端访问WebService基础

WebServiceFoundation.asmx

转:Ajax调用Webservice和后台方法<%@ WebService Language="C#" Class="Sample.WebServiceFoundation" %>
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
using System;
转:Ajax调用Webservice和后台方法
using System.Web;
转:Ajax调用Webservice和后台方法
using System.Web.Services;
转:Ajax调用Webservice和后台方法
using System.Web.Services.Protocols;
转:Ajax调用Webservice和后台方法
using System.Web.Script.Services;
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
namespace Sample
}

1_WebServiceFoundation.aspx

转:Ajax调用Webservice和后台方法<%@ Page Language="C#" AutoEventWireup="true" CodeFile="1_WebServiceFoundation.aspx.cs" Inherits="_1_WebServiceFoundation" %>
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<html xmlns="http://www.w3.org/1999/xhtml" >
转:Ajax调用Webservice和后台方法
<head runat="server">
转:Ajax调用Webservice和后台方法    
<title>Untitled Page</title>
转:Ajax调用Webservice和后台方法
</head>
转:Ajax调用Webservice和后台方法
<body>
转:Ajax调用Webservice和后台方法    
<form id="form1" runat="server">
转:Ajax调用Webservice和后台方法        
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
转:Ajax调用Webservice和后台方法            
<Services>
转:Ajax调用Webservice和后台方法                
<asp:ServiceReference Path="WebServiceFoundation.asmx" InlineScript="true" /> //InlineScript 默认为false
转:Ajax调用Webservice和后台方法
            </Services>
转:Ajax调用Webservice和后台方法        
</asp:ScriptManager>
转:Ajax调用Webservice和后台方法        
转:Ajax调用Webservice和后台方法        
<input type="button" value="Get Random" onclick="getRandom()" />
转:Ajax调用Webservice和后台方法        
<input type="button" value="Get Range Random" onclick="getRandom(50, 100)" />
转:Ajax调用Webservice和后台方法        
转:Ajax调用Webservice和后台方法        
<script language="javascript" type="text/javascript">
转:Ajax调用Webservice和后台方法            function getRandom(minValue, maxValue)

arguments:在JavaScript方法被调用时,都会初始化一个arguments这么一个对象,可当作一个数组类使用,但实际上是一个object,存放的就是这个方法调用时实际传入的参数

三、客户端访问PageMethod
    • 服务器端
        – 只能在aspx页面中定义
        – 只能是公开静态方法(static,无法在方法中访问页面控件
        – 使用WebMethodAttribute标记
        – ScriptManager的EnablePageMethods属性设为true (EnablePageMethods默认为false
    • 客户端
        – 通过PageMethods.MethodName访问

DEMO 2 客户端访问PageMethods基础

2_PageMethods.aspx

转:Ajax调用Webservice和后台方法<%@ Page Language="C#" AutoEventWireup="true" CodeFile="2_PageMethods.aspx.cs" Inherits="_2_PageMethods" %>
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<html xmlns="http://www.w3.org/1999/xhtml" >
转:Ajax调用Webservice和后台方法
<head runat="server">
转:Ajax调用Webservice和后台方法    
<title>Untitled Page</title>
转:Ajax调用Webservice和后台方法
</head>
转:Ajax调用Webservice和后台方法
<body>
转:Ajax调用Webservice和后台方法    
<form id="form1" runat="server">
转:Ajax调用Webservice和后台方法        
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
转:Ajax调用Webservice和后台方法        
转:Ajax调用Webservice和后台方法        
<input type="button" value="Get Current Time" onclick="getCurrentTime()" />
转:Ajax调用Webservice和后台方法    
转:Ajax调用Webservice和后台方法        
<script language="javascript" type="text/javascript">
转:Ajax调用Webservice和后台方法            function getCurrentTime()

2_PageMethods.aspx.cs 

转:Ajax调用Webservice和后台方法using System;
转:Ajax调用Webservice和后台方法
using System.Data;
转:Ajax调用Webservice和后台方法
using System.Configuration;
转:Ajax调用Webservice和后台方法
using System.Collections;
转:Ajax调用Webservice和后台方法
using System.Web;
转:Ajax调用Webservice和后台方法
using System.Web.Security;
转:Ajax调用Webservice和后台方法
using System.Web.UI;
转:Ajax调用Webservice和后台方法
using System.Web.UI.WebControls;
转:Ajax调用Webservice和后台方法
using System.Web.UI.WebControls.WebParts;
转:Ajax调用Webservice和后台方法
using System.Web.UI.HtmlControls;
转:Ajax调用Webservice和后台方法
using System.Web.Services;
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
public partial class _2_PageMethods : System.Web.UI.Page

运行结果:

当点击button时将 弹出

 Mon May 14 15:11:57 UTC+0800 2007

四、错误处理
    • 调用时可以提供一个额外的错误回调函数
    • 包括超时和服务器端抛出的异常
    • 超时只能设置在WebService级别
        – 或者设置在PageMethods对象上
        – 无法在每个Method Call时指定(只能在Page中设定
    • Sys.Net.WebServiceError (是个类)
        – timedout、message、exceptionType、stackTrace属性
只有timeout为布尔型,其他都为字符型

 DEMO 3 错误处理

ErrorHandling.asmx

转:Ajax调用Webservice和后台方法<%@ WebService Language="C#" Class="ErrorHandling" %>
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
using System;
转:Ajax调用Webservice和后台方法
using System.Web;
转:Ajax调用Webservice和后台方法
using System.Web.Services;
转:Ajax调用Webservice和后台方法
using System.Web.Services.Protocols;
转:Ajax调用Webservice和后台方法
using System.Web.Script.Services;
转:Ajax调用Webservice和后台方法
using System.Threading;
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法[WebService(Namespace 
= "http://tempuri.org/")]
转:Ajax调用Webservice和后台方法[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
转:Ajax调用Webservice和后台方法[ScriptService]
转:Ajax调用Webservice和后台方法
public class ErrorHandling  : System.Web.Services.WebService

3_ErrorHandling.aspx

转:Ajax调用Webservice和后台方法<%@ Page Language="C#" AutoEventWireup="true" CodeFile="3_ErrorHandling.aspx.cs" Inherits="_3_ErrorHandling" %>
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
转:Ajax调用Webservice和后台方法
转:Ajax调用Webservice和后台方法
<html xmlns="http://www.w3.org/1999/xhtml" >
转:Ajax调用Webservice和后台方法
<head runat="server">
转:Ajax调用Webservice和后台方法    
<title>Untitled Page</title>
转:Ajax调用Webservice和后台方法
</head>
转:Ajax调用Webservice和后台方法
<body>
转:Ajax调用Webservice和后台方法    
<form id="form1" runat="server">
转:Ajax调用Webservice和后台方法        
<asp:ScriptManager ID="ScriptManager1" runat="server">
转:Ajax调用Webservice和后台方法            
<Services>
转:Ajax调用Webservice和后台方法                
<asp:ServiceReference Path="ErrorHandling.asmx" />
转:Ajax调用Webservice和后台方法            
</Services>
转:Ajax调用Webservice和后台方法        
</asp:ScriptManager>
转:Ajax调用Webservice和后台方法        
转:Ajax调用Webservice和后台方法        
<input type="button" value="getDivision" onclick="getDivision(5, 0)" />
转:Ajax调用Webservice和后台方法        
<input type="button" value="timeout" onclick="timeout()" />
转:Ajax调用Webservice和后台方法        
转:Ajax调用Webservice和后台方法        
<script language="javascript" type="text/javascript">
转:Ajax调用Webservice和后台方法            function getDivision(a, b)

相关文章: