注:Atlas中的Mashup極其復雜,其中涉及眾多的對象與架構,為了寫這篇文章,我花了不少時間學習研究。同時,關于這方面資源的匱乏簡直到了令人發指的地步。往往Google一下居然一條記錄都沒有……但Mashup在現今的AJAX程序中又是如此重要,近一段時間內,我也收到了好多朋友的消息,希望我能介紹一下Mashup的心得,這里我就斗膽獻丑了。但目前為止,我對Atlas中的Mashup也只是粗通皮毛,所以這個系列中將僅僅通過一些實例應用來順便說出我的理解,其中一定有很多錯誤疏漏之處,還請各位不吝斧正!也歡迎大家探討實際項目中遇到的問題。
對于傳統的Web程序,瀏覽器只與一臺服務器進行通信,并從這臺服務器上得到所有信息。同時出于安全考慮,頁面上的JavaScript也只允許和同一臺服務器通信。而隨著目前Internet的發展,越來越多的Web Service分散在互聯網的各處,作為開發人員的我們自然希望能夠充分利用這些已經存在的Service,這時,我們就需要對遠端的Web Service做以Mashup。這是一項常見的需求,也是一項重復性很高的勞動,幸運的是,ASP.NET Atlas充分認識到了這一點,并對此有著強大的內建支持。
Atlas通過引入一種新的HTTP模塊——asbx文件(其中b代表Bridge),來實現對遠端Web Service請求的Mashup。asbx文件其實是一個結構化的XML文檔,里面包含了對遠端Web Service方法的封裝,當然,您也可以同時指定一個CodeBehind CS文件用來對其進行一些復雜的控制。asbx文件和aspx文件位于同一臺主機上。Atlas網站在編譯的時候會根據asbx中的聲明以及相應的CodeBehind文件(如果存在)將其編譯并注冊。這樣當客戶端JavaScript調用該asbx中定義的方法時,asbx會將其轉發給實際的Web Service并將返回結果會送給客戶端,起到一個Bridge的作用。而對于客戶端,就和直接調用 同一主機上的Web Service沒什么不一樣。
如果您安裝過Atlas的msi文件,并建立了一個Atlas Web Site,那么下面的配置已經為您做好了。否則,啟用asbx的支持,您需要如下的操作:
- 在IIS的虛擬目錄下按照下圖所示,添加.asbx文件的映射。
- 在web.config的sectionGroup段添加:

- 在web.config的compilation段添加:



- 在web.config的httphandlers段添加:

- 在web.config的httpmodules段添加:

下面讓我們通過一個最簡單的示例學習Atlas中Mashup的基本概念和asbx文件的基本結構。
首先,編寫一個Web Service用來模擬在Internet上存在的一個服務。當然,這個服務沒什么實際用處,僅僅是求兩個integer的和:



















我將這個Web Service置于另外一臺主機的IIS上,注意:我們應該更改web.config文件以允許通過HTTP GET對Web Service的訪問,而不僅僅是默認的POST:






下面就是最有“技術含量”的asbx文件了:













注意到作為一個合法的XML文件,asbx文件第一行是XML的聲明。然后,對于本asbx文件,有如下部分:
- bridge段,聲明該mashup的namespace和class name。注意這兩個屬性代表的是客戶端調用時所見的被mashup過的namespace和class name,并不是遠端Web Service的namespace和class name。
- proxy段,聲明該mashup的類型,這里我們指定為Microsoft.Web.Services.BridgeRestProxy,相應的,指定一個代表服務URL的string:http://dflyingchen/MyServices/SimpleWebService.asmx/Add 。
- method段,您可以添加多個method段,每一個代表一個定義在上述URL中的服務。這里我們指定了Method的名稱,同樣的,它代表的僅是客戶端調用的名稱(這樣客戶端將以namespace.classname.methodname()的方式調用該mashup)。
- input段,其中通過parameter標記聲明了該方法的參數。parameter標記中的name屬性代表參數名,注意這里聲明的參數名要和遠端Web Method的參數名保持一致。這里我們聲明了兩個參數,與上面定義的Web Method的兩個參數對應。
到此為止,一個最簡單的asbx文件就完成了。當然,上述介紹與完備相距甚遠。關于asbx文件中的其它可選聲明,目前并沒有官方文檔,我只能在接下來的幾個例子中根據使用情況適當介紹。
我們再來建立一個Atlas Page測試一下該mashup,首先添加一個ScriptManager,并添加對上述mashup的引用,注意擴展名為asbx,不要寫習慣了就直接寫成了asmx:





然后添加一段HTML,用來提供用戶輸入,引發調用并顯示結果;












瀏覽器中如下:
示例程序源代碼可以在此下載:http://files.cnblogs.com/dflying/SimpleBridgeDemo.rar
在接下來的幾個實例中,我將對一些“真實有用”的Web Service進行mashup并應用到我們的程序中。