注: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 的和:
完成之後,您可以在瀏覽器中測試一下,訪問:
http://dflyingchen/MyServices/SimpleWebService.asmx/Add?value1=1&value2=2
(不要忘記更改前面相應的主機名),如果你能得到下圖所示的結果,那麼恭喜你,Web
Service沒問題了。
下面就是最有“技術含量”的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:
最後,一小段JavaScript調用mashup方法:
注意調用方法的簽名是Test.SimpleWebService.Add(),其中的每一部分都在asbx 文件中有所聲明。另外,返回值是一個XML string,這裏爲了簡化,就直接輸出到頁面上了。
瀏覽器中如下:
示例程序源代碼可以在此下載:http://www.cnblogs.com/Files/dflying/SimpleBridgeDemo.rar
在接下來的幾個實例中,我將對一些“真實有用”的Web Service 進行mashup 並應用到我們的程序中。