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

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

編輯:.NET實例教程

1、改變客戶端訪問WebService代理方法名

  • 客戶端無法重載函數,只能根據arguments的參數來判斷。並且不能根據參數的類型來判斷
  • 如果WebService端有函數的重載,這時候映射到客戶端是無法區別的。那麼我們需要把函數的重載在客戶端映射成非重載函數。在WebService方法上添加一個[WebMethod(MessageName = “…")]這樣一個標記

    [WebMethod]
    public int GetRandom()
    ...{
        return new Random(DateTime.Now.Millisecond).Next();
    }

    [WebMethod(MessageName="GetRangeRandom")]
    public int GetRandom(int minValue, int maxValue)
    ...{
        return new Random(DateTime.Now.Millisecond).Next(minValue, maxValue);
    } 如例所示,那麼有兩個參數的GetRandom方法映射到客戶端就是GetRangeRandom方法了。當然,不一定是重載時才能改變方法名,但是在重載時改變方法名才能體現這個標記的意義。

2、使用Http的Get方式訪問WebService的方法

  • 使用Get方式訪問WebService的方法,必須加上[ScriptMethod(UseHttpGet=true)]標記

    [WebMethod]
    [ScriptMethod(UseHttpGet=true)]
    public int GetRangeRandom(int minValue, int maxValue)
    ...{
        return new Random(DateTime.Now.Millisecond).Next(minValue, maxValue);
    }
  • 參數將使用QueryString進行傳遞
  • 性能較HTTPPOST方法略有提高

3、讓方法返回XML對象

  • 客戶端調用WebService方法默認使用JSon字符串返回數據。
  • 要返回XML對象必須給ScriptMethod標記加上ResponseForma=ResponseFormat.XML參數
  • Response的Content-Type將被設置為text/XML
  • 返回普通對象時將使用XMLSerializer輸出,如上面例子中返回Employee
  • 返回字符串時可以直接作為XML字符串輸出,就是說就算給出XML結構類似的字符串,經過XMLSerializeString處理之後,會將<和>轉義,並且根元素為string

    //輸入的XML結構的字符串
    <xml>hello</XML>

    //被XMLSerializeString處理後輸出的字符串,根元素為string,<>被轉義
    <string>&lt;xml&gt;hello&lt;/XML&gt;</string>

4、在WebService方法中使用Session

  • 在WebMethod標簽中加入EnableSession=true參數

    [WebMethod(EnableSession = true)]
    public int AddOne()

        HttpSessionState session = HttpContext.Current.Session;
        object objValue = session["value"];
        int value = objValue == null ? 0 : (int)objValue;
        value++;
        session["value"] = value;
        return value;
    }

      5、在客戶端調用WebService的安全性

      • 完全適應ASP.Net的認證機制
      • 可以使用FormsAuthentication,讓WebService方法可以操作CookIE
      • Impersonation
      • PrincipalPermission

      6、不使用WebService代理的對應方法,使用客戶端代理直接調用WebService方法。

      • Invoke方法簽名
        Sys.Net.WebServiceProxy.invoke= function (
        servicePath,/*Service路徑*/
        methodName,/*方法名*/
        useGet,/*是否使用HTTPGET方法*/
        params,/*方法參數*/
        onSucceeded,/*成功後的回調函數*/
        onFailure,/*失敗後的回調函數*/
        userContext,/*用戶上下文對象*/
        timeout /* 超時時間*/){ ... }

        function getRandom(minValue, maxValue)
        ...{
            Sys.Net.WebServiceProxy.invoke(
            "Services/UseHttpGetService.asmx",
            "GetRangeRandom",
            true,
            ...{ "minValue" : minValue,
              "maxValue" : maxValue},
            onSucceeded,
            null,
            null,
            -1);
        } 對應上面的invoke參數說明和例子,對WebService生成的代理方法是如何調用WebService有一定了解

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved