天天看點

由基礎觸類旁通--Ajax調用WebService的簡單例子

在Ajax中,浏覽器通過javascript可以直接調用WebService,下面具體講解如何實作:

第一步:在WS目錄下建立一個名為AjaxService的asmx檔案。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

/// <summary>

///AjaxService 的摘要說明

/// </summary>

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

//若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。

[System.Web.Script.Services.ScriptService]

public class AjaxService : System.Web.Services.WebService {

    public AjaxService () {

        //如果使用設計的元件,請取消注釋以下行

        //InitializeComponent();

    }

    [WebMethod]

    public string HelloWorld(string s) {

        return "Hello World"+s;

}

第二步:需要為Default.aspx頁面設定ScriptManager的Service屬性:

有兩種方法可以實作:

(一)、在Default.aspx頁面為ScriptManager直接添加(注意ScriptManager要放在其它所有Ajax控件的最前面)

       <asp:ScriptManager ID="ScriptManager1" runat="server">

            <Services>

                <asp:ServiceReference Path="~/WS/AjaxService.asmx" />

            </Services>

        </asp:ScriptManager>

(二)、通過程式設計方式實作,在Default.aspx.cs檔案的Page_Load事件中寫如下代碼

         ServiceReference sr = new ServiceReference ();

         sr.Path = "~/WS/AjaxService.asmx";

         ScriptManager1.Services.Add(reference);

第三步:為Default.aspx頁面添加顯示元素及js函數

    <div>

        <asp:ScriptManager ID="ScriptManager1" runat="server">

        <input id="Button1" type="button" value="Ajax調用WebService"  onclick="callAjax()"/>

        <input id="tbmsg" type="text" />

        <input id="tbShow" type="text" />

    </div>

    js調用ws的一個<script></script>

    <script type="text/javascript" language="javascript">

        function callAjax() {

            ws = AjaxService.HelloWorld(document.getElementById("tbmsg").value, OnEnd);

            return false;

        }

        function OnEnd(result) {

            document.getElementById("tbShow").value = result;

    </script>

     說明:AjaxService.HelloWorld()方法是關鍵,可以根據實際需要,在ws檔案裡書寫需要的代碼;可以發現在頁面中并沒有發現定義過AjaxService.HelloWorld()這個js函數,其實這個方法是有ScriptManager自動生成的,在運作時,ScriptManager将為每一個ServiceReference對象生成一個用戶端代理,AjaxService就是AjaxService.asmx.cs中定義的AjaxService類的代理。

      HelloWorld()方法是AjaxService.asmx.cs中定義的HelloWorld方法的遠端調用。但是AjaxService.asmx.cs檔案中的HelloWorld隻有一個string的參數,在用戶端,JS程式通路時,還要加上另外一個參數,這個參數是對另外一個函數的引用,表示當調用結束時,自動調用的方法名稱,并将HelloWorld的傳回值作為這個方法的參數。于是才會有了OnEnd(Result)這個方法的定義。

繼續閱讀