程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Asp.Net Ajax 學習筆記6 客戶端訪問WebService(上)

Asp.Net Ajax 學習筆記6 客戶端訪問WebService(上)

編輯:.NET實例教程
1、要客戶端能訪問WebService,那麼WebService類必須加上[ScriptService]標記,此標記在System.Web.Script.Services命名空間下,並且被訪問的方法必須是public和加上[WebMethod]標記。客戶端在ScriptManager標簽之間加上如下代碼

<Services>
      <ASP:ServiceReference Path="WebService地址" InlineScript="true" />
</Services>

InlineScript屬性表示是否將代理緩存到頁面中(Html源碼中)。在JS代碼調用WebService時,如果WebService有命名空間,必須加上命名空間調用,並且WebService裡面方法是作為靜態方法調用,也就是說,不用實例化WebService。在客戶端調用WebService的方法的時候,ScriptManager代理的方法後默認追加幾個參數個參數,

注意,即使沒有返回值也會調用回調函數。

2、客戶端訪問頁面的方法。頁面的方法必須寫在aspx頁面文件對應的ASPx.cs文件上。方法必須是public和static並且用[WebMethod]標記。客戶端必須使用PageMethods.方法名()訪問,並且與訪問WebService一樣有成功後的回調函數。注:ScriptManager的EnablePageMethods屬性必須設置為true,才能訪問頁面的方法。一般很少使用客戶端訪問頁面的方法。

3、調用PageMethod和WebService的錯誤處理。如第一點所描述的失敗回調函數的參數為一個error對象,那麼錯誤對象有一下幾種方法,來返回錯誤的一些信息WebService方法:

[WebMethod]
public Employee DoubleSalary(Employee employee)
...{
    employee.Salary *= 2;
    return employee; 
}

Employee類:



public class Employee
...{
    public string FirstName;

    public string LastName;

    public int Salary;

    public string FullName
    ...{
        get
        ...{
            return this.FirstName + " " + this.LastName;
        }
    }
}

那麼客戶端的employee對象,因為與Employee的公開字段相同名字的FIEld,並且WebMethod的方法是Employee類,那麼,調用WebMethod的方法的時候employee對象由客戶端的Object類型轉換為了Employee類型。那麼返回值也與此類似,只不過轉換方向反過來了。

容器對象:在WebService一方要返回一個集合或參數是一個集合,那麼這個方法的返回值或參數必須實現了IList接口或IDictionary接口的對象。並且IDictionary對象的key必須是string類型,那麼客戶端的對象一定是Array類型。這樣就能實現由客戶端的Array類型到服務段的IList或IDictionary類型的互轉

注:Array類型可以象IList接口是一個一維數組,也可以是類似與IDictionary是一個帶有key的二位數組



error.get_timedOut()
error.get_message()
error.get_exceptionType()
error.get_stackTrace()

生成的WebService代理存在一個set_timeout()方法,用來設置調用WebService的超時時間。PageMethod不存在這個方法。

4、負責類型的使用

公有屬性或公有Field會被釋放和接受。這句話的意思就是如果通過客戶端傳遞過來的對象,這個對象的屬性與WebService裡方法參數所對應的類的公有屬性或公有FIEld字段名相同,將自動轉換為相應的對象。如以下代碼

客戶端:



function doubleSalary()
...{
    var employee = new Object();
    employee.FirstName = "Jeffrey";
    employee.LastName = "Zhao";
    employee.Salary = 1000;
    ComplexType.DoubleSalary(employee, doubleSalarySucceeded);
}



WebMethod(arg1, …, argN, onSucceeded, onFailed,userContext)

onSucceeded:執行成功調用的回調函數地址



onSucceeded(result, userContext, methodName)

onSucceeded的三個參數:result函數的返回值,userContext是有調用WebMethod的userContext,可以將一些附加信息傳遞到onSucceeded函數,methodName調用成功回調函數的的WebMethod的函數名。

onFailed:執行失敗/超時的回調函數地址



onFailed(result, userContext, methodName)

onFailed的三個參數:result是error對象,後面兩個參數與onSucceeded的兩個參數相同。

userContext:由用戶指定要傳給回調函數的附加信息

WebService方法生成的代理方法最後三個參數可以通過以下幾個方法



WebService.set_defaultUserContext(information)
WebService.set_defaultSucceededCallback(functionName)
WebService.set_defaultFailedCallback(functionName)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved